c# - 如何使用 Microsoft Graph API 从包含嵌套组的组中仅获取用户?
问题描述
我正在尝试从分发列表中获取所有唯一的用户电子邮件地址(包括在嵌套 DL 中找到的所有电子邮件地址)
有没有办法从嵌套 DL 返回所有 Microsoft.Graph.User 的列表而不包括 Microsoft.Graph.Groups(即过滤器只包括用户)?
我目前正在扁平化嵌套的 DL.TransitiveMembers
用于从各个级别获取组成员。
分发列表查询的返回是目录对象的集合。(在本例中为组和用户)
在我的代码中,我将类型转换为 User 以访问用户电子邮件地址。
List<string> userMail = new List<string>();
var distList = await graphClient
.Groups[$"{distributionListId}"]
.TransitiveMembers
.Request()
.GetAsync();
foreach(User member in distList) {
userMail.Add(member.Mail);
}
我希望查询将运行并返回 Microsoft.Graph.Users 列表,然后我可以遍历它们并获取我想要的电子邮件地址。
但是,如果 distList 由于我的 foreach 循环中的强制转换而包含 Microsoft.Graph.Group 对象,它会崩溃。
更新
我已将代码更新为以下内容:
foreach (User member in distList.Where(x => x.ODataType.Contains("user"))) {
userMail.Add(member.Mail)
}
这可行,但理想情况下,我想避免在代码中使用硬编码字符串,如“用户”。
解决方案
Enumerable.OfType
方法可用于按用户类型过滤成员,如下所示:
var members = await graphClient
.Groups[$"{distributionListId}"]
.TransitiveMembers
.Request()
.GetAsync();
//filter members by user type
var users = members.OfType<Microsoft.Graph.User>();
foreach (var user in users)
{
Console.WriteLine(user.Mail);
}
推荐阅读
- java - 无法从 Maven 运行 testNG 测试
- react-native - React Native 驾照扫描仪
- php - 更改 Woocommerce 简码上的产品元查询
- node.js - 使用Angular 6在节点服务器中创建和上传文本文件
- android - 更改自定义键盘的布局
- javascript - 如何在 JavaScript 和 PHP 中迭代对象
- go - 在golang中将时间戳转换为ISO格式
- cordova - 任务':preReleaseBuild的构建错误“无法捕获输入文件的快照”
- mongodb - 如何在 MongoDB 中上传图像并将其显示在我的模板中?
- java - yml 中的 KeyStore 配置