c# - 比较 2 列表 - LINQ
问题描述
有 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
.
解决方案
您可以创建自定义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))
推荐阅读
- typescript - Typescript 中 ()=>any 和 {():any} 有什么区别
- c# - 如何在 ASP.NET Core MVC 中提交动态数量的字符串输入
- next.js - Next.js 10版内置Image组件无法加载
- php - Authorize.net api 调用的问题开始返回 null
- python - __init__.py 需要导入才能在 Pytest 中工作。但是使用 Python 3.8
- ios - 从开发切换到生产时与 iCloud 帐户关联的数据
- python - 在python中选择字符串中的一组数字
- laravel - Laravel Eloquent:whereHas 涉及多个表的关系
- go - 从 Firestore 中提取 Map 对象,获取随机垃圾
- math - 根据自变量的相关系数导出两个因变量之间的相关系数