1

私がエンティティでMemberあり、含めたくない名前のリストであるとします。

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;
4

2 に答える 2

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')

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

たとえば、次のようなことを言うことは許可されていません

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

または

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

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

于 2012-05-07T21:54:08.050 に答える
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() ;
于 2015-05-24T11:55:43.697 に答える