我在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();
有任何比较这两个对象的建议吗?
答案 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有关如何正确操作的信息,因为它并不像看起来那么简单。