比较两个对象linq列表

时间:2014-06-07 08:18:01

标签: c# 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类的两个对象(我的数据库中的一个表)。但是当我比较从它们获取except时,它返回了脱机数据库的所有数据(假设没有数据,因为这些对象中的数据是相同的)

List<Customer> toInsert = offlineCus.Except(onlineCusMap).ToList();

有任何比较这两个对象的建议吗?

1 个答案:

答案 0 :(得分:1)

正如Jon在评论中指出的那样,为了使用Except,您需要覆盖Equals / GetHashCode以确定客户的区别;默认情况下,您的比较器将通过参考,在大多数情况下是不够的。

另一种方法是查询onlineCusMap列表中不存在的任何客户。我认为可以安全地假设customer_id足够独特以区分客户

List<Customer> toInsert = 
    offlineCus.Where(x => !onlineCusMap.Any(y => y.customer_id == x.customer_id))
              .ToList();

如果您决定覆盖Equals,建议您阅读guidelines有关如何正确操作的信息,因为它并不像看起来那么简单。