Как правильно итерировать две коллекции, используя LINQ для проверки соответствия свойств? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь проверить, является ли пользователь членом группы, на основе результатов из Graph Client SDK и выбора групп, выбранных пользователем на внешнем веб-сайте .NET Core.У меня есть рабочий образец, использующий две петли foreach, но я уверен, что есть более чистый способ использования лямбды.Я использовал их в прошлом, но я немного застрял в синтаксисе.

У меня есть список 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...");
    }
}

Я пробовал следующее, однако это выдает мне ошибку:

bool isMemberLambda = Groups.ForEach(g => memberOfGroups.Contains(m => m.Id == g.GroupId));

Невозможно преобразовать лямбда-выражение в тип 'Directory.Object', поскольку это не тип делегата

1 Ответ

1 голос
/ 28 апреля 2019

Используйте Linq:

 var isMember = memberOfGroups.Any(mog => Groups.Any(g => g.GroupId == mog.Id));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...