linqを使用して、行の値が配列に存在するかどうかを確認する必要があります。
SQLクエリに相当します。
WHERE ID IN (2,3,4,5)
どうすればいいですか?
。含む
var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x
もちろん、あなたの単純な問題で、あなたは次のようなものを持つことができます:
var resultset = from x in collection where x >= 2 && x <= 5 select x
IEnumerable.Contains()を使用してSQLINと同等の機能を実行します。
var idlist = new int[] { 2, 3, 4, 5 };
var result = from x in source
where idlist.Contains(x.Id)
select x;
db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x));
また
from x in db.SomeTable
where new[] {2,3,4,5}.Contains(x)
Intersect と Except はもう少し簡潔で、おそらくもう少し高速になるでしょう。
の
collection.Intersect(new[] {2,3,4,5});
ありませんで
collection.Except(new[] {2,3,4,5});
また
IN のメソッド構文
collection.Where(x => new[] {2,3,4,5}.Contains(x));
およびNOT IN
collection.Where(x => !(new[] {2,3,4,5}.Contains(x)));
IEnumerable<T>.Contains(T)
ステートメントは、あなたが探していることを実行する必要があります。
.Contains() を使用した非常に基本的な例
List<int> list = new List<int>();
for (int k = 1; k < 10; k++)
{
list.Add(k);
}
int[] conditionList = new int[]{2,3,4};
var a = (from test in list
where conditionList.Contains(test)
select test);
ヘルプメソッドを書くことができます:
public bool Contains(int x, params int[] set) {
return set.Contains(x);
}
ショートコードを使用します:
var resultset = from x in collection
where Contains(x, 2, 3, 4, 5)
select x;
以下は、値のリスト内の値を検索するために使用できる一般的な拡張メソッドです。
public static bool In<T>(this T searchValue, params T[] valuesToSearch)
{
if (valuesToSearch == null)
return false;
for (int i = 0; i < valuesToSearch.Length; i++)
if (searchValue.Equals(valuesToSearch[i]))
return true;
return false;
}
これは次のように使用できます。
int i = 5;
i.In(45, 44, 5, 234); // Returns true
string s = "test";
s.In("aa", "b", "c"); // Returns false
これは、条件ステートメントで便利です。