2010-09-09 7 views
6

Ich habe versucht, verschiedene Werte mit Linq zu NHibernate zu bekommen, und ich versage kläglich.Wie kann ich bestimmte Werte mit Linq zu NHibernate erhalten?

Ich habe versucht:

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

return query.Distinct(); 

Neben

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

return query.Distinct(new RequestorComparer()); 

Wo RequestorComparer ist

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 
} 

Egal wie ich die Syntax strukturieren, wie es scheint nie zu schlagen .Distinct(). Ohne .Distinct() gibt es standardmäßig mehrere Duplikate in der Tabelle, die ich abfrage, in der Reihenfolge von 195 Gesamtsätzen, aber es sollten nur 22 verschiedene Werte zurückgegeben werden.

Ich bin mir nicht sicher, was ich falsch mache, aber würde jede Hilfe schätzen, die zur Verfügung gestellt werden kann.

Dank

+0

Welche SQL sind diese linq Abfragen generieren? –

+0

Warum melden Sie es nicht als Fehler? – Paco

Antwort

1

Ich habe festgestellt, dass das folgende funktioniert (NHibernate v3.3.1).

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

Hinweis: Dies verwendet die integrierte Abfrage ' 'von Linq Provider in NHibernate 3.0. Die ursprüngliche Frage bezieht sich auf den NHibernate.Linq-Anbieter, der nicht mehr unterstützt wird. – Phill

1

Try Umordnung zu:

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

    select requesters; 

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

Ich habe mit der Bestellung von OrderBy und Distinct Probleme gesehen.

Lassen Sie mich wissen, wenn das für Sie nicht funktioniert.

+0

Versuchte das, funktionierte immer noch nicht richtig. Ich bekomme genau die gleichen Ergebnisse wie zuvor. –

+0

SELECT this_.REQUESTORID als FK8_0_0_, this_.REQUESTOR als REQUESTOR0_0_ VON REQUESTORS this_ WHERE this_.REQUESTORID =: p0 ORDER BY this_.REQUESTOR asc;: p0 = 10775 <- Dies ist die SQL, die von der obigen Abfrage ausgegeben wird. –

0

Haben Sie es mit dem neuen integrierten Linq-Anbieter in NH 3.0 versucht?

Der alte ist sehr begrenzt.