我正在尝试从通讯组列表中获取所有唯一的用户电子邮件地址(包括在嵌套DL中找到的所有电子邮件地址)
有没有一种方法可以仅从嵌套DL中返回所有Microsoft.Graph.User的列表,而不包括Microsoft.Graph.Groups(即仅包含Users的过滤器)?
我目前正在使用.TransitiveMembers
展平嵌套DL,以从各个级别获取组成员。
通讯组列表查询的返回是目录对象的集合。 (在本例中为组和用户)
在我的代码中,我强制键入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包含Microsoft.Graph.Group对象,它由于我的foreach循环中的强制转换而崩溃。
更新
我已将代码更新为以下内容:
foreach (User member in distList.Where(x => x.ODataType.Contains("user"))) {
userMail.Add(member.Mail)
}
这有效,但理想情况下,我希望避免在代码中使用诸如“用户”之类的硬编码字符串。
答案 0 :(得分:1)
Enumerable.OfType
method可用于按用户类型过滤成员,如下所示:
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);
}