3

私はこの問題に間違ってアプローチしているというおかしな感じがあります。これが私がやろうとしていることです:

文字列 ( List<string>) のリストがあり、その行の特定のフィールドがリスト内の文字列の 1 つと一致するテーブルからすべての行を返したいと考えています。ループを使用して文字列ごとに 1 つの Linq ステートメントを実行すると、これは簡単です。もちろん、データベースへの往復はできるだけ避けたいと思っています。

ここでどのような戦略をお勧めしますか? LINQ を Entity Framework と一緒に使用することに問題はありませんが、これらの特定のテクノロジによって制限される可能性があることに気付きました。

Entity Framework 4 を使用しています。

4

3 に答える 3

4

使用できますList.Contains

List<string> yourList = ...;
var query = context.YourTable.Where(x => yourList.Contains(x.Foo));
于 2012-07-06T19:30:46.277 に答える
2

複数Whereの呼び出しは、AND操作に類似しています。あなたが欲しいのはORです:

col.Where(w=>w==1 || w==2 || w==3)

または、SQLIN演算子のマッピングは次のContains方法です。

var vals=new[] {1,2,3};
var filteredcol=col.Where(w=>vals.Contains(w));
于 2012-07-06T19:32:07.127 に答える
1

そのような場合には、拡張メソッドを使用します

public static bool In<T>(this T source, params T[] list)
{
   if (source = null)
       throw new NullReferenceException("Source is Null");

   return list.Contains(source);
}

そしてそれを次のように呼び出します

c.Where(w=> w.In("a", "g", "f"))
于 2012-07-06T19:40:47.343 に答える