Как я могу получить различные значения, используя Linq для NHibernate? - PullRequest
6 голосов
/ 09 сентября 2010

Я пытался получить разные значения, используя 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 ]

2 голосов
/ 02 июля 2012

Я обнаружил, что следующие работы (NHibernate v3.3.1).

         var query= (from requesters  in _session.Query<Requesters>() 
                         orderby requesters.Requestor  ascending
                         select requesters.Requestor).Distinct();
1 голос
/ 09 сентября 2010

Попробуйте изменить порядок на:

var query = from requesters in _session.Linq<Requesters>()

    select requesters;

return query.Distinct().OrderBy(x=>x.Requestor);

Я видел проблемы с заказом OrderBy и Distinct.

Дайте мне знать, если это не сработает для вас.

0 голосов
/ 12 сентября 2010

Вы пробовали с новым интегрированным провайдером Linq в NH 3.0?

Старый очень ограничен.

...