【问题标题】:How to get only User's from a Group that contains nested Groups using Microsoft Graph API?如何使用 Microsoft Graph API 从包含嵌套组的组中仅获取用户?
【发布时间】:2019-08-07 10:49:00
【问题描述】:

我正在尝试从分发列表中获取所有唯一的用户电子邮件地址(包括在嵌套 DL 中找到的所有电子邮件地址)

有没有办法从嵌套 DL 返回所有 Microsoft.Graph.User 的列表,而不包括 Microsoft.Graph.Groups(即过滤器只包括用户)?

我目前正在使用 .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 由于我的 foreach 循环中的强制转换而包含 Microsoft.Graph.Group 对象,它会崩溃。

更新

我已将代码更新为以下内容:

foreach (User member in distList.Where(x => x.ODataType.Contains("user"))) {

  userMail.Add(member.Mail)

}

这可行,但理想情况下,我希望避免在代码中使用硬编码字符串,例如“用户”。

【问题讨论】:

    标签: c# linq .net-core microsoft-graph-api


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多