如何使用Linq到NHibernate获取不同的值?

时间:2010-09-09 15:09:35

标签: nhibernate distinct linq-to-nhibernate

我一直试图使用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个不同的值。

我不确定我做错了什么,但非常感谢能提供的任何帮助。

由于

3 个答案:

答案 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提供程序?

旧的非常有限。