linq查询从一个列表中选择另一个列表

时间:2011-09-16 21:32:53

标签: c# linq-to-objects

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 intList

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

2 个答案:

答案 0 :(得分: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 };

答案 1 :(得分:2)

这也很有意思并且表现良好:

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

您知道何时在SQL SELECT中连接表?这是使用Linq to Objects进行的。