C# LINQ查询帮助

C# LINQ查询帮助,c#,linq,C#,Linq,我有两套 List<CustomClass1> items1 List<CustomClass2> items2 CustomClass1 has a property KEY CustomClass2 has a property KEY 列出项目1 列出项目2 CustomClass1有一个属性键 CustomClass2有一个属性键 我只想在items1中保留那些在items2中有匹配键的条目。如何通过LINQ实现这一点 谢谢您可以随时使用Intersect

我有两套

List<CustomClass1> items1 
List<CustomClass2> items2

CustomClass1 has a property KEY
CustomClass2 has a property KEY
列出项目1
列出项目2
CustomClass1有一个属性键
CustomClass2有一个属性键
我只想在items1中保留那些在items2中有匹配键的条目。如何通过LINQ实现这一点


谢谢

您可以随时使用Intersect操作符-

var result = item1.Intersect(item2);

如有必要,重载允许使用权益比较器,但如果您的项目来自同一上下文,则不必使用它

谢谢。。这将修改原始集合。。我是说项目1。不,没有。没有标准(如:来自.net framework)LINQ运算符修改原始集合。@Jeff Mercado您能在此简要解释一下您的性能问题吗?我只是好奇。@asawyer:这马上就会变成一个
O(n*m)
操作。对于
items1
中的每个项目,我们在
items2
中执行(线性)搜索。另一方面,使用连接可以(也可能是)进行优化以进行一些散列。因此,如果我有选择的话,我会避免这种做法。@Jeff Mercado谢谢!我现在明白了问题所在。当他们要求LINQ时,请实际使用LINQ本身!:\不仅仅是方法。@Megrdad这是完全有效的Linq代码。这是Lambda语法,而不是查询语法。@asawyer:但是AFAIK“LINQ”的意思是“语言集成查询”,从我看来,这门语言和普通的C#没有什么不同。@Mehrdad有趣的是,它们几乎一样,应该编译成类似Femaref的答案。是的,这就是我的疑问。@Mehrdad:都是LINQ的问题。使用查询语法并不会让它变得更简单。LINQ不仅仅是关于语法,还包括支持它的库。@Mehrdad您可能对什么是LINQ和什么不是LINQ有一点误解。不,Mehrdad。这是查询语法,我的是方法链语法。LINQ两者都是。只有当它们是相同类型的集合时,它才起作用。然而,他们不在问题的范围之内。你完全正确。。没有注意到集合是不同类型的。谢谢@第六:我想你还是应该在这里申请。这特别是使用LINQ to对象,这里使用的方法可能不适用于其他提供程序。@杰夫:我想这是暗示他有两个
List
s。我不反对它被重新贴上这样的标签。
var res = items1.Join(items2,
                      item1 => item1.Key, 
                      item2 => item2.Key, 
                      (item1, item2) => item1);
var q = from i1 in items1 
        join i2 in items2 on i1.Key equals i2.Key 
        select i1;
var result = item1.Intersect(item2);