基于另一个列表进行选择的LINQ查询

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 to objects从testList中获取i在intList中的items。

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

2个回答

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 to Objects 进行连接的方法。


我不确定我是否理解正确。在这个特定的查询中,它是如何知道 i => i 是什么。它没有在任何地方定义过。 - Alex J
@Alex J - 表达式 i => i 是一个 lambda 表达式,它是自身的定义。在这个查询中,它表示联接使用了 intList 的值。 - Enigmativity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接