【问题标题】:Microsoft Graph: Get Children of all Child Groups (.NET)Microsoft Graph:获取所有子组的子项 (.NET)
【发布时间】:2021-06-21 15:55:14
【问题描述】:

我在 .NET Blazor 项目中使用 Graph API 来获取组的所有成员。除非该组有其他组作为成员而不仅仅是用户,否则它会很好地工作。我使用的代码如下:

var groups = await GraphServiceClient.Groups.Request()
    .Filter($"mail+eq+'{email}'")
    .Expand("members")
    .GetAsync(); //get the member groups by email, then include member information
var members = groups.FirstOrDefault().Members.ToList(); //get the first group (there should be only one) and convert it to list
return members.Select(s => ((User)s).DisplayName).ToList(); //cast the items to User and get the display name, then return this list

当我尝试将组投射到用户时失败。当然,我可以使用.Where 过滤掉这些组,但是我会错过它们包含的用户。

如何获取所有子组的成员(尽可能多的级别)并一次性返回?

【问题讨论】:

    标签: c# .net microsoft-graph-api blazor


    【解决方案1】:

    您想要执行的操作称为“递归”,这应该是您在处理嵌套对象时的默认搜索词。您可以编写自己的递归函数,或尝试使用 Linq 递归。它们有点难以掌握,但最终非常有用。

    但是,API 似乎已经包含一个名为“transitiveMembers”的函数,这可能是您正在寻找的:

    Microsoft Documentation

    注意:我不知道该 API 调用的返回格式,但看起来它必须被过滤,因为它将包括嵌套的组对象、设备等。我还想说,在这种情况下,我认为“成员”类似于类成员,而不是每个组的实际用户成员。

    【讨论】:

    • transitiveMembers 可以解决问题,但我认为没有办法将其作为一个查询来完成。现在我需要运行我已经拥有的查询(减去成员)来获取 ID,然后使用 ID 来获取传递成员,如 here 所述。这很好用,但我想作为一个查询来做。
    • 我并不是说没有办法在一个查询中做到这一点,但我对此表示怀疑。根据我自己的数据库工作经验,这就是模式——找到你想要数据的对象,然后检索数据。让我们知道您是否找到了您要找的东西! :D
    • 会的!目前,双重查询解决方案运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多