6

PredicateBuilder を使用して、SQL の IN または NOT IN クエリと同様の機能を取得するにはどうすればよいですか?

たとえば、ID のリストがあり、ID が ID と一致するか一致しないすべての人を選択したいとします。

人々の一致機能はかなり単純です (ただし、より良い方法があるかもしれません)。

var predicate = PredicateBuilder.False<Person>()
foreach (int i in personIDs)
{
  int temp = i;
  predicate = predicate.Or(e=>e.PersonID == temp);
}
return persons.Where(predicate);

では、どうすれば反対を取得できますか?ID が personIDs リストにないすべての人が必要です。

4

4 に答える 4

3

Entity Framework を使用していますか?

次に、PredicateBuilder を使用せずにクエリを作成できます。

var personIds = new List<int>() { 8,9,10 };
var query = persons.Where(it => !personIds.Contains(it.PersonId));

この LINQ ステートメントから、SQL NOT IN クエリが作成されます。

于 2012-07-23T08:48:36.127 に答える
3

ド・モーガンに聞く:

NOT (P OR Q) = (NOT P) AND (NOT Q)

コードで NOT IN 条件に相当するものを生成するには、次のように書き換えます。

var predicate = PredicateBuilder.True<Person>()

predicate = predicate.And(e=>e.PersonID != temp);
于 2011-08-23T05:25:39.960 に答える
0

APIを見ずに....

var predicate = PredicateBuilder.True<Person>()
foreach (int i in personIDs)
{
    int temp = i;
    predicate = predicate.And(e=>e.PersonID != temp);
}
return persons.Where(predicate);
于 2011-08-23T05:30:40.733 に答える
0

これは、あなたの望むことですか?

var predicate = PredicateBuilder.True<Person>()
foreach (int i in personIDs)
{
    int temp = i;
    predicate = predicate.And(e => e.PersonID != temp);
}
return persons.Where(predicate);
于 2011-08-23T05:26:28.307 に答える