Вот один из способов добавления переменного числа предложений , где , к вашему запросу LINQ.
Обратите внимание, что я не коснулся вашей логики битовой маски, я просто сосредоточился на кратном , где s.
// C#
private List<User> GetUsersFromRoles(uint[] UserRoles)
{
var users = dc.Users;
foreach (uint role in UserRoles)
{
users = users.Where(u => (u.UserRolesBitmask & role) == role);
}
return users.ToList();
}
РЕДАКТИРОВАТЬ: На самом деле, это будет И , где предложения, и вы хотели ИЛИ их. Следующий подход (внутреннее соединение) работает в LINQ to Objects, но не может быть переведен в SQL с LINQ to SQL:
var result = from user in Users
from role in UserRoles
where (user.UserRolesBitmask & role) == role
select user;