与自定义比较器不同

时间:2011-04-18 21:32:06

标签: c# linq-to-objects

尝试使用自定义比较器Distinct(),它会给我错误:

  

无法从使用中推断出来。尝试明确指定类型参数

Default比较器工作正常,但没有给出我期望的结果。我该如何解决这个问题?

public class TimeEntryValidation
{
    public string EmployeeID { get; set; }
    public string EmployeeLocation { get; set; }
    public string EmployeeDepartment { get; set; }
    public int RowIndex { get; set; }
}

public class MyRowComparer : IEqualityComparer<TimeEntryValidation>
{
    public bool Equals(TimeEntryValidation x, TimeEntryValidation y)
    {
        return (x.EmployeeDepartment == y.EmployeeDepartment && x.EmployeeLocation == y.EmployeeLocation);
    }

    public int GetHashCode(TimeEntryValidation obj)
    {
        return obj.EmployeeID.GetHashCode(); 
    }
}

void Query(List<TimeEntryValidation> listToQuery)
{
    var groupedData =
        from oneValid in listToQuery
        group oneValid by oneValid.EmployeeID
            into g
        where g.Count() > 1
        select new {DoubleItems = g};
    var listItems = groupedData.Distinct(new MyRowComparer());
}

1 个答案:

答案 0 :(得分:1)

groupedData的类型为IEnumerable<{an anonymous type}>,而MyRowComparerIEqualityComparer<TimeEntryValidation>

目前还不清楚您是否打算将listItems作为一个群组列表,或者您是否想要实际的项目。

如果是后者,你可能想要这样的东西:

void Query(List<TimeEntryValidation> listToQuery)
{
    var groupedData = from oneValid in listToQuery
                        group oneValid by oneValid.EmployeeID
                            into g
                            where g.Count() > 1
                            select  g ;
    var listItems = groupedData.SelectMany(group => group).Distinct(new MyRowComparer());
    //listItems is now an IEnumerable<TimeEntryValidation>
}