【发布时间】:2015-04-16 12:25:43
【问题描述】:
我有两个数据库 DB1 和 DB2,我从每个数据库中检索销售订单并放入列表中。我现在想在 DB2 中找到 DB1 中缺少的销售订单,以便将它们添加到 DB2 中
我有listDB1 和ListDB2 的形式:
public class SalesOrder
{
public int docNum;
public string cardCode;
public string cardName;
public DateTime docDate;
public DateTime docDueDate;
public double docTotal;
public int lineItemCount;
public string comments;
}
我现在想比较两个列表,忽略两个列表的 docNum,这是在比较其余元素时自动生成的。使用:
unaddedSOs = listDB1.Except(listDB2).ToList();
比较包括 docNum 在内的所有内容。如何实现我需要的,以便获得未添加的文档编号?
【问题讨论】:
-
尝试实现
IEquatable<SalesOrder>。 -
"比较所有,包括 docNum",不,它只是默认比较引用。覆盖
Equals+GetHashCode或提供自定义IEqualityComparer<SalesOrder>。 -
@TimSchmelter:确实,我根本看不出原始版本是如何工作的,除非这两个列表包含相同项目的相同引用。
-
@Codor:它不会仍然比较字符串成员的引用吗?
-
@Baldrick 尽管
string是一种引用类型,但它是通过值语义实现的,即检查是否相等并比较内容。
标签: c#