2011-12-22 3 views
4

Может кто-нибудь помочь мне с этим, пожалуйста? Я хотел бы просто «где в». Вот SQL, который делает то, что я хочу.LINQ to SQL, где в (синтаксис лямбда)

select ur.RoleID 
from UserRoles ur 
where ur.RoleID in (5, 15) 

И вот моя попытка. Метод .IN() не существует, очевидно, просто положил мои агрессивные мысли lol.

int roleid; 
foreach (data r in dataList) { 
    using (DataContext communityContext = new DataContext()) { 
     roleid = communityContext.UserRoles 
      .Where(x => x.UserID == r.ClientId && x.RoleID.IN(5, 15)) 
      .Select(x => x.RoleID) 
      .First(); 
    } 
} 
+3

Это очень много. Мне кажется, что команда .NET должна просто создать псевдоним метода расширения для 'In()', который соответствует 'Contains()'. – Yuck

ответ

8

Как вы уже In не существует, как таковые .Contains() вместо этого, если у вас есть список, в вашем случае, вы можете также использовать x.RoleId == 5 || x.RoleId == 15

например

var allowedRoles = new int[] { 5, 15 }; 

то в вашей статье where сделать:

allowedRoles.Contains(x.RoleID) 
+0

Следует отметить, что инфраструктура ADO.NET Entity не поддерживает .Contains - но есть решение, плавающее в сети, для пользовательского метода расширения, который позволяет вам все еще делать это с помощью linq для entity. –

1
var setNumbers = new List<int>() { 5, 15}; 

communityContext.UserRoles.Where(x => x.UserID == r.ClientId) 
          .Where(x => setNumbers.Contains(x.RoleID)) 
          ... 

НТН

0

Я бы переписать его как ...

int roleid; 
var allowedRoles = new[] {5, 15}; 
foreach (data r in dataList) { 
    using (DataContext communityContext = new DataContext()) { 
     roleid = communityContext.UserRoles 
      .First(x=> x.UserID == r.ClientId && allowedRoles.Contains(x.RoleID)) 
      .RoleID;    
    } 
} 

Кроме того, я не почему вы создаете datacontext внутри цикла. Это кажется расточительным, поскольку datacontext не зависит от datalist.

+0

Зачем вы ставите сначала в начале, а не в конец? – Kukoy

+0

вы не можете сделать select() на первом() – Kukoy

+0

oops. набрал его в неправильном порядке. Прости. Это то, что происходит, когда вы не обращаете внимания. исправлено. –

Смежные вопросы