2011-09-16 52 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

相关问题