我一直试图使用Linq到NHibernate获取不同的值,而且我失败了。
我试过了:
var query = from requesters in _session.Linq<Requesters>()
orderby requesters.Requestor ascending
select requesters;
return query.Distinct();
以及
var query = from requesters in _session.Linq<Requesters>()
orderby requesters.Requestor ascending
select requesters;
return query.Distinct(new RequestorComparer());
RequestorComparer是
public class RequestorComparer : IEqualityComparer<Requesters>
{
#region IEqualityComparer<Requesters> Members
bool IEqualityComparer<Requesters>.Equals(Requesters x, Requesters y)
{
//return x.RequestorId.Value.Equals(y.RequestorId.Value);
return ((x.RequestorId == y.RequestorId) && (x.Requestor == y.Requestor));
}
int IEqualityComparer<Requesters>.GetHashCode(Requesters obj)
{
return obj.RequestorId.Value.GetHashCode();
}
#endregion
}
无论我如何构造语法,它似乎永远不会达到.Distinct()
。如果没有.Distinct()
,我在查询的表中默认有多个重复项,总共有195条记录,但只返回22个不同的值。
我不确定我做错了什么,但非常感谢能提供的任何帮助。
由于
答案 0 :(得分:2)
我发现以下工作(NHibernate v3.3.1)。
var query= (from requesters in _session.Query<Requesters>()
orderby requesters.Requestor ascending
select requesters.Requestor).Distinct();
答案 1 :(得分:1)
尝试重新排序:
var query = from requesters in _session.Linq<Requesters>()
select requesters;
return query.Distinct().OrderBy(x=>x.Requestor);
我看到订购OrderBy和Distinct的问题。
如果这不适合你,请告诉我。
答案 2 :(得分:0)
您是否尝试过在NH 3.0中使用新的集成Linq提供程序?
旧的非常有限。