Сортировка LINQ Отличается предложением Where

#c# #linq #lambda

Вопрос:

Я ищу помощь с инструкцией LINQ; Во-первых, у меня есть список, состоящий из двух столбцов, это учетная запись пользователей и их уровень доступа.

 AccountID |  Access
-------------------
1374      |   4
1832      |   1
1383      |   1
1182      |   2
 

Приведенный выше список получен из кэша сеансов.

 List<myUsers> users = new List<myUsers>();
users = myUsers.GetFromUserSession();
 

Теперь я хотел бы создать новый список, содержащий только список учетных записей, доступ к которым больше или равен 3. Вот где я играл, но я не могу понять, как правильно включить оператор Where. Например, intellisense не позволяет мне представить что-то вроде x.Access.

 List<int> adminList = myUsers.Select(x => x.AccountID).Where(x => x >= 3).Distinct().ToList()
 

Сейчас я нахожусь на том этапе, когда я просто возлюсь с этим, пока что-то не сработает, но подумал, что спрошу сообщество, так как я уверен, что это очень легко для некоторых людей.

Ответ №1:

ваш запрос неправильно структурирован

 var admins = myUsers.Where(x => x.Access >= 3)
          .Select(x => x.AccountID)
          .Distinct()
          .ToList()
 

Ответ №2:

Делая select это до where , вы получаете только AccountID с этого момента, поэтому вы применяете where это к AccountID .

это должно быть

 List<int> adminList =myUsers.Where(x => x.Access >= 3).Select(x => x.AccountID).Distinct().ToList()
 

Ответ №3:

Вы должны использовать Where первый, а затем выбрать из myUsers ( AccountID ) то, что вы хотите:

 List<int> adminList = myUsers
    .Where(x => x.Access >= 3)
    .Select(x => x.AccountID) // here x is still the myUsers instance
    .Distinct()
    .ToList();