繁体   English   中英

比较对象linq的两个列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM