[英]Compare two lists of object linq
我在wcf上有一个联机数据库,还有一个脱机数据库。 我想对其进行同步,因此我首先将在线数据映射到离线数据对象中。
List<com.somee.wobservice.Customer> onlineCus = myservice.QueryCustomer();
List<Customer> offlineCus = dbc.Customers.ToList();
List<Customer> onlineCusMap = new List<Customer>();
foreach (com.somee.wobservice.Customer c in onlineCus)
{
Customer cus = new Customer();
cus.customer_id = c.customer_id;
cus.customer_name = c.customer_name;
cus.customer_email = c.customer_email;
cus.password = c.password;
cus.balance = c.balance;
onlineCusMap.Add(cus);
}
现在,我有Customer类的2个对象(数据库中的表)。 但是,当我比较从它们中获取except时,它返回了脱机数据库的所有数据(假定为无数据,因为这些对象中的数据相同)
List<Customer> toInsert = offlineCus.Except(onlineCusMap).ToList();
有什么建议可以比较这两个对象吗?
正如乔恩在评论中指出的那样,要使用“ Except
您需要重写Equals
/ GetHashCode
才能确定与客户有何区别; 默认情况下,您的比较器将作为参考,在大多数情况下是不够的。
替代方法是只查询onlineCusMap
列表中不存在的任何客户。 我认为可以肯定的是, customer_id
唯一性足以区分客户
List<Customer> toInsert =
offlineCus.Where(x => !onlineCusMap.Any(y => y.customer_id == x.customer_id))
.ToList();
如果您决定覆盖Equals
我建议您阅读有关如何正确执行此操作的准则 ,因为它并不像看起来那样简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.