2011-12-22 16 views
4

誰か助けてくれますか?私はシンプルな「どこにいるの?」と思っています。ここに私がしたいことをするSQLがあります。LINQ to SQL where(ラムダ構文)

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

これが私の試みです。メソッド.IN()は明らかに存在しません、ただ私のaggrevated思考を入れてください。あなたがリストを持っている場合、SE .Contains()ではなく、あなたのケースであなたも

x.RoleId == 5 || x.RoleId == 15を使用することができますあなたはInが存在しない言及したよう

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チームが 'Contains()'に対応する 'In()'の拡張メソッドエイリアスを作成するだけでいいと思う。 – Yuck

答えて

8

、例えば

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

は、あなたのwhere句行うには:

allowedRoles.Contains(x.RoleID) 
+0

ADO.NET Entityフレームワークは.Containsをサポートしていないことに言及する価値はありますが、linq to entityを使用して引き続き行うことができるカスタム拡張メソッドのネット上に浮かんでいるソリューションがあります。 –

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

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

HTH

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はデータリストに依存しないので、無駄になります。

+0

なぜあなたは終わりの代わりに最初に入れますか? – Kukoy

+0

最初に() – Kukoy

+0

oopsでselect()を実行することはできません。それを間違った順序で入力しました。ごめんなさい。それはあなたが注意を払っていないときに起こることです。一定。 –