我的自定义比较器似乎不起作用。我想要计算不同对象的数量,但每次都得到1的结果。即使查看数据库本身清楚地显示查询具有不同“TimeOfAction”值的实例超过1个。
class TimeComparer : IEqualityComparer<Action>
{
public bool Equals(Action a, Action b)
{
if (a.TimeOfAction == b.TimeOfAction)
return true;
else
return false;
}
public int GetHashCode(Action obj)
{
return obj.ToString().ToLower().GetHashCode();
}
}
我觉得问题可能出在 GetHashCode 方法上,因为我对它的工作原理不是很熟悉。以下是 LINQ 查询代码。我将其转换为 AsEnumerable,因为 Linq to Entities 不支持 distinct 方法。
DBEntities db = new DBEntities();
IEnumerable<Action> query =
from action in db.Action.AsEnumerable()
where action.TimeOfAction > new DateTime(2010, 11, 1, 0, 0, 0)
where action.TimeOfAction < new DateTime(2011, 2, 7, 0, 0, 0)
where action.EntityName == "seant"
select action;
var count = query.
Distinct(new TimeComparer()).Count();
IEnumerable<>
吗?)。 - Marc Gravell