2011-09-16 220 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}; 

如何使用linq將對象獲取items from testList where i is in intListlinq查詢基於另一個列表從一個列表中進行選擇

List<Test> testIntList = testList.Where(t=>t.i in intList)

回答

7

從技術上講,這將是:

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

然而,這可能是緩慢的,如果intList大時,由於List<T>.Contains執行其在O(n)的搜索。更快的方法是使用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到對象來完成的。

+0

我不知道我是否理解這個權利。這是怎麼知道我=>我是在這個特定的查詢。它沒有在任何地方定義 –

+0

@Alex J - 表達式'i => i'是一個lambda表達式,它是它自己的定義。在這個查詢中,它表示連接使用來自'intList'的值。 – Enigmativity

相關問題