【发布时间】:2015-04-22 17:25:54
【问题描述】:
我想为我的一个 LINQ to SQL 类(由 Visual Studio 自动生成)覆盖 EqualityComparer,这样当我查找与 IndexOf 的匹配项时,它将使用我的比较而不是对此类执行的任何操作。它似乎不起作用,并且我的覆盖没有被调用。
比较的逻辑如下:
ClientFileList f = new ClientFileList();
f.ClientID = -1 * lines;
f.JobID = JobID;
f.DRSCode = aParts[0];
f.DocumentNumber = aParts[1];
f.Revision = aParts[2];
f.Title = aParts[3];
f.TitleLine2 = aParts[4];
f.TitleLine3 = aParts[5];
f.SheetNumber = aParts[6];
f.Status = aParts[7];
f.ColorCode = ColorCode;
if(oCFile.IndexOf(f)==-1)
{
// this element is not a duplicate
oCFile.Add(f);
}
这是我用来覆盖 EqualityComparer 的扩展类:
public partial class ClientFileList : EqualityComparer<ClientFileList>
{
public override bool Equals(ClientFileList x, ClientFileList y)
{
//throw new NotImplementedException();
return (x.DocumentNumber == y.DocumentNumber &&
x.Revision == y.Revision);
}
public override int GetHashCode(ClientFileList obj)
{
String s = obj.DocumentNumber + obj.Revision;
return s.GetHashCode();
//throw new NotImplementedException();
}
}
我希望的是,如果具有匹配 DocumentNumber 和 Revision 的文档已经在数据库中,我不想再次添加它(这是在读取分隔文本文件并插入数据库时实现的)。 IndexOf 上的 MSDN 文档似乎表明它将使用 EqualityComparer 。 . .但我没有看到这种行为。我做错了什么?
【问题讨论】:
-
您不应该将答案编辑到问题中。
标签: c# .net observablecollection