2010-09-09 7 views
6

Próbowałem uzyskać różne wartości, używając Linq do NHibernate i nie udało mi się.Jak uzyskać różne wartości za pomocą Linq do NHibernate?

Próbowałem:

var query = from requesters in _session.Linq<Requesters>() 
     orderby requesters.Requestor ascending 
     select requesters; 

return query.Distinct(); 

jak również

var query = from requesters in _session.Linq<Requesters>() 
     orderby requesters.Requestor ascending 
     select requesters; 

return query.Distinct(new RequestorComparer()); 

Gdzie RequestorComparer jest

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 
} 

Bez względu na to jak wyglądać struktura składnię, nie wydaje się, aby uderzyć .Distinct(). Bez .Distinct() domyślnie istnieje wiele duplikatów w tabeli, której szukam, na podstawie 195 rekordów ogółem, ale powinno być zwróconych tylko 22 różnych wartości.

Nie jestem pewien, co robię źle, ale bardzo doceniam każdą pomoc, która może być dostarczona.

Dzięki

+0

Co sql generują zapytania linq? –

+0

Dlaczego nie zgłosisz tego jako błędu? – Paco

Odpowiedz

1

Znalazłem następujące prace (NHibernate v3.3.1).

  var query= (from requesters in _session.Query<Requesters>() 
         orderby requesters.Requestor ascending 
         select requesters.Requestor).Distinct(); 
+0

Uwaga: Wykorzystuje to zintegrowane zapytanie dostawcy Linq 'w NHibernate 3.0. Pierwotne pytanie dotyczy dostawcy NHibernate.Linq, który nie jest już obsługiwany. – Phill

1

Spróbuj zmiana kolejności do:

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

    select requesters; 

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

widziałem problemy z zamawiania OrderBy i wyraźne.

Daj mi znać, jeśli to nie zadziała.

+0

Próbowałem, że nadal nie działa poprawnie. Otrzymuję dokładnie takie same wyniki jak poprzednio. –

+0

SELECT this_.REQUESTORID jako FK8_0_0_, this_.REQUESTOR jako REQUESTOR0_0_ OD REQUESTORS this_ WHERE this_.REQUESTORID =: p0 ORDER BY this_.REQUESTOR asc;: p0 = 10775 <- To jest SQL, który jest wyprowadzany przez powyższe zapytanie. –

0

Czy próbowałeś już z nowym zintegrowanym dostawcą Linq w NH 3.0?

Stary jest bardzo ograniczony.