Linq声明选择两个集合之间的公共元素

时间:2015-05-12 04:48:57

标签: c# linq

我尝试实现搜索功能,并且我想要选择变量AB中常见的所有元素,然后删除其余元素。

我的代码如下所示:

A.ForEach(y =>
{
    temp = temp.Where(x => x.Id== y.Id);
});

问题是如果A有一些temp不包含的值,我会得到一个空的温度。

我希望我足够清楚,但只是为了确保: 如果A包含6,10和 temp包含10,7。我想要有10个。

什么是正确的加入或任何其他Linq声明?我无法使用intersect,因为两个变量来自不同的表格。

2 个答案:

答案 0 :(得分:4)

您可能希望使用加入。

A.Join(B, a => a.Id, b => b.Id, (a,b) => new { A = a, B = b });

这将产生一个可枚举的A和B连接的行以及匿名类型:

public class AnonymousType {
   AType A;
   BType B;
}

加入C# Joins/Where with Linq and Lambda

的信息

答案 1 :(得分:0)

您可以尝试此解决方案,它对我来说效果很好,可以按ID返回两个集合之间的共享元素:IEnumerable SetA和IEnumerable SetB:

IEnumerable<MyClassTypeA> SetA;
IEnumerable<MyClassTypeB> SetB;   
Dictionary<Id, MyClassTypeA> entriesOfSetA= SetA.ToDictionary(x=>x.id);
var result= SetB.Where(x=> entriesOfSetA.ContainsKey(x.id));