C# Microsoft Graph:获取所有子组(.NET)的子级

C# Microsoft Graph:获取所有子组(.NET)的子级,c#,.net,microsoft-graph-api,blazor,C#,.net,Microsoft Graph Api,Blazor,我在一个.NETBlazor项目中使用GraphAPI来获取组中的所有成员。除非该组有其他组作为成员,而不仅仅是用户,否则它工作得很好。我使用的代码如下所示: var-groups=await-GraphServiceClient.groups.Request() .Filter($“mail+eq+'{email}'”) .扩大(“成员”) .GetAsync()//通过电子邮件获取成员组,然后包括成员信息 var members=groups.FirstOrDefault().members

我在一个.NETBlazor项目中使用GraphAPI来获取组中的所有成员。除非该组有其他组作为成员,而不仅仅是用户,否则它工作得很好。我使用的代码如下所示:

var-groups=await-GraphServiceClient.groups.Request()
.Filter($“mail+eq+'{email}'”)
.扩大(“成员”)
.GetAsync()//通过电子邮件获取成员组,然后包括成员信息
var members=groups.FirstOrDefault().members.ToList()//获取第一个组(应该只有一个)并将其转换为列表
返回成员。选择(s=>((用户)s).DisplayName.ToList()//将项目强制转换为用户并获取显示名称,然后返回此列表
当我试图将组强制转换为用户时,它失败了。当然,我可以使用
.Where
筛选出这些组,但这样我就会错过它们包含的用户


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

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

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


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

TransiveMembers可以做到这一点,但我看不到一种将其作为一个查询来实现的方法。现在我需要运行我已经拥有的查询(不包括成员)来获取ID,然后使用ID获取可传递的成员,如前所述。这很好,但我想把它作为一个查询来做。我不是说没有一种方法可以在一个查询中完成,但我对此表示怀疑。根据我自己的数据库工作经验,这是一种模式——找到需要数据的对象,然后检索数据。如果你找到你要找的东西,请告诉我们!:我会的!目前,双查询解决方案运行良好。