2012-05-07 8 views
1

私がMemberのエンティティであり、含まないことを望む名前のリストであるとします。LINQ:2リスト(2リスト:エンティティリストと配列)を検索するにはどうすればいいですか?

var excludeNames = new [] { "A","B","C","D"}; 

var members = db.Members.Except(excludeNames); 

または

var excludeNames = new[]{ "A","B","C","D"}; 
var Members = db.Members.Where(m=> excludeNames.Where(xcl => xcl != m.Name)); 

これらはいずれも作業していません。 は私もこれを試してみました:

var excludeNames = new[] { "A","B","C","D"}; 
var members = from m in db.Members 
       from xcl in excludeNames 
       where m.Name != xcl 
       select m; 
+0

どのようなエラーが表示されますか?最後の例が確実に機能するはずです。 – scottm

答えて

1

私はこれが良い解決策になると思います。

var excludeNames = new [] { "A","B","C","D"}; 

var members = db.Members.Where(member => excludeNames.Any(member.Name) == false).ToList() ; 

//or  
var excludeNames = new [] { "A","B","C","D"}; 

var members = db.Members.Where(member => !excludeNames.Any(member.Name)).ToList() ; 
7

を次のように試してみてください。

var excludeNames = new[] { "A","B","C","D"}; 
var members = from m in db.Members 
       where !excludeNames.Contains(m.Name) 
       select m; 

注LINQを使用すると、複数の方法で問合せをすることを可能にする場合でも、あなたはまだという事実を考慮する必要があることクエリをSQLに変換する必要があります。また、Entity FrameworkがサポートするSQLの方言は、行セットとは異なる値リストを扱います。

たとえば、あなたはSQLで構築したいクエリは例えば

SELECT * 
FROM Members AS m 
WHERE m.name NOT IN ('A', 'B', 'C', 'C') 

(SQLでx IN (list)は、LINQでlist.Contains(x)に変換されます。)

だろう、あなたは何かを言うことは許されません

SELECT * 
FROM Members AS m 
WHERE EXISTS(SELECT 1 
      FROM ('A', 'B', 'C', 'C') AS xcl 
      WHERE m.name != xcl) 

NOR

のような

これらのクエリは許可されていません。 Entity Frameworkは、LINQクエリをSQLに変換する際には非常に賢明ですが、その制限があります。

関連する問題