#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();