2011-09-16 15 views
5
public class Test 
{ 
    int i; 
    string s; 
} 

List<Test> testList = new List<Test>(); //assume there are some values in it. 

List<int> intList = new List<int>(){ 1,2,3}; 

どのように言うのですか?items from testList where i is in intListオブジェクトにlinqを使用してください。技術的にはList<Test> testIntList = testList.Where(t=>t.i in intList)他のリストに基づいて1つのリストから選択するlinqクエリ

答えて

7

よう

何か、それは次のようになります。

List<Test> testIntList = testList.Where(t => intList.Contains(t.i)).ToList(); 

List<T>.ContainsはO(n)の中にその検索を実行するのでintListが、大きい場合しかし、それは遅いかもしれません。より高速なアプローチはHashSet<T>を使用することです:

HashSet<int> intList = new HashSet<int>(){ 1,2,3 }; 
2

また、これは興味深いものになるだろうとも実行します:

List<test> finalList = testList.Join(intList, 
            test => test.id, 
            i => i, 
            (t, i) => t).ToList(); 

あなたはSQL SELECTでテーブルを結合するときあなたが知っていますか?これは、Linq to Objectsを使って行う方法です。

+0

私はこの権利を理解しているかわかりません。これはどのように私はこの特定のクエリにあるかを知っています。それはどこにも定義されていない。 –

+0

@Alex J - 式i => iは、それ自身の定義であるラムダ式です。このクエリでは、結合では 'intList'の値が使用されます。 – Enigmativity

関連する問題