有2个大型对象列表,在这里我需要执行where子句并找到匹配的记录。
List<A> a= ...;
List<A> b = ...;
模型
Id
名称
年龄
地址
与List比较后,我需要返回一个包含List所有对象的列表。
我应该检查的属性是:如果Ids
相等,Names
是否相等以及ages
是否相等。
List<A> common = a.Where(n => b.Select(o => o.Id).Contains(n.Id))
.Where(n => b.Select(o => o.Name).Contains(n.Name))
.Where(n => b.Select(o => o.Age).Contains(n.Age))
这应该有问题,因为它返回了Null
。
答案 0 :(得分:1)
您可以创建自定义EqualityComparer
:
public class ModelEqualityComparer : IEqualityComparer<Model>
{
public bool Equals(Model x, Model y)
{
return x.Id == y.Id && x.Name == y.Name && x.Age == y.Age;
}
...
}
并像这样使用它:
var intersect = a.Intersect(b, new ModelEqualityComparer());
如果只需要LINQ解决方案:
List<Model> common = a
.Where(q => b.Any(w => w.Id == q.Id && w.Name == q.Name && q.Age == w.Age))