C# 使用LINQ对两个集合进行迭代以检查匹配属性的正确方法是什么?

C# 使用LINQ对两个集合进行迭代以检查匹配属性的正确方法是什么?,c#,asp.net-core,C#,Asp.net Core,我试图根据Graph Client SDK的结果以及用户在前端.NET核心网站中选择的组来检查用户是否是组的成员。我有一个使用两个foreach循环的工作示例,但我确信使用lambda有一种更干净的方法。我以前用过它们,但我想我只是有点拘泥于语法 我有一个GroupModel列表和一组Microsoft Graph Client SDK结果: [BindProperty] public List<GroupModel> Groups { get; set; } public asy

我试图根据Graph Client SDK的结果以及用户在前端.NET核心网站中选择的组来检查用户是否是组的成员。我有一个使用两个
foreach
循环的工作示例,但我确信使用lambda有一种更干净的方法。我以前用过它们,但我想我只是有点拘泥于语法

我有一个
GroupModel
列表和一组Microsoft Graph Client SDK结果:

[BindProperty]
public List<GroupModel> Groups { get; set; }

public async Task OnPostAsync()
{
    var graphServiceClient = await GetAuthenticatedGraphClient();
    IUserMemberOfCollectionWithReferencesPage memberOfGroups = await graphServiceClient.Me.MemberOf.Request().GetAsync();

    var isMember = false;

    //cycle through groups the user is a member of
    foreach (var member in memberOfGroups)
    {
        //cycle through groups used for permission to the asset
        foreach (var group in Groups)
        {
            if (group.GroupId == member.Id)
            {
                //user is a member of the group being set
                isMember = true;
            }
        }
    }

    if (!isMember)
    {
        ModelState.AddModelError("GroupsError", "You are not a member...");
    }
}
无法将lambda表达式转换为类型“Directory.Object”,因为它不是委托类型

使用Linq:

 var isMember = memberOfGroups.Any(mog => Groups.Any(g => g.GroupId == mog.Id));

我相信您可以将forEach与where子句一起使用。
 var isMember = memberOfGroups.Any(mog => Groups.Any(g => g.GroupId == mog.Id));