Вы должны включить его с точки зрения того, как вы думаете об этом. Вместо того, чтобы делать «in», чтобы найти права пользователя текущего элемента в предопределенном наборе применимых прав пользователя, вы спрашиваете предопределенный набор прав пользователя, содержит ли он применимое значение текущего элемента. Это точно так же, как вы найдете элемент в обычном списке в .NET.
Есть два способа сделать это с помощью LINQ, один использует синтаксис запроса, а другой использует синтаксис метода. По сути, они одинаковы и могут использоваться взаимозаменяемо в зависимости от ваших предпочтений:
Синтаксис запроса:
var selected = from u in users
where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights)
select u
foreach(user u in selected)
{
//Do your stuff on each selected user;
}
Синтаксис метода:
var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));
foreach(user u in selected)
{
//Do stuff on each selected user;
}
Моим личным предпочтением в этом случае может быть синтаксис метода, потому что вместо присвоения переменной я мог бы выполнять foreach над анонимным вызовом, например так:
foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}
Синтаксически это выглядит более сложным, и вам нужно понять концепцию лямбда-выражений или делегатов, чтобы действительно выяснить, что происходит, но, как вы можете видеть, это сводит код в достаточное количество.
Все зависит от вашего стиля кодирования и предпочтений - все три моих примера делают одно и то же немного по-разному.
Альтернативный способ даже не использует LINQ, вы можете использовать тот же синтаксис метода, заменив «where» на «FindAll», и получите тот же результат, который также будет работать в .NET 2.0:
foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}