覆盖LINQ to SQL类

时间:2015-04-22 17:25:54

标签: c# .net observablecollection

我想覆盖我的一个LINQ to SQL类的EqualityComparer(由visual studio自动生成),这样当我寻找与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。 。 。但我没有看到这种行为。我做错了什么?

1 个答案:

答案 0 :(得分:2)

  

我想覆盖我的一个LINQ to SQL类

的EqualityComparer

我真的不认为你这样做。我想您要覆盖Equals方法,并可能实现IEquatable<T>EqualityComparer适用于能够比较其他类型对象的对象 - 例如AgeComparer可能派生自EqualityComparer<Person>

如果您覆盖Equals(object)GetHashCode,并实施IEquatable<T>,那么假设IndexOf是{{}},我希望oCFile能够正常工作{1}}或类似的东西(你没有告诉过我们)。但是,它当然不会影响LINQ to SQL本身如何发出查询。