2010-09-09 14 views
6

Ho cercato di ottenere valori distinti utilizzando LINQ to NHibernate e sto fallendo miseramente.Come posso ottenere valori distinti usando Linq su NHibernate?

ho provato:

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

return query.Distinct(); 

Così come

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

return query.Distinct(new RequestorComparer()); 

Dove 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 
} 

Non importa come strutturare la sintassi, non sembra mai a colpire il .Distinct(). Senza .Distinct() ci sono più duplicati per impostazione predefinita nella tabella che sto interrogazione, su ordine di 195 record totali, ma non ci dovrebbero essere solo 22 valori distinti restituiti.

io non sono sicuro di quello che sto facendo male, ma apprezzo molto qualsiasi tipo di assistenza che può essere fornita.

Grazie

+0

Quali sono le query di linq che generano? –

+0

Perché non lo segnala come un bug? – Paco

risposta

1

Ho scoperto che le seguenti opere (NHibernate v3.3.1).

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

Nota: questo utilizza la query del fornitore Linq integrata 'in NHibernate 3.0. La domanda originale riguarda il provider NHibernate.Linq che non è più supportato. – Phill

1

Prova riordino a:

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

    select requesters; 

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

ho visto problemi con l'ordinazione di OrderBy e distinti.

fatemi sapere se questo non funziona per voi.

+0

Ho provato che, ancora non ha funzionato bene. Sto ottenendo esattamente gli stessi risultati di prima. –

+0

SELEZIONA this_.REQUESTORID come FK8_0_0_, this_.REQUESTOR come REQUESTOR0_0_ DA richiedenti this_ DOVE this_.REQUESTORID =: p0 ORDER BY this_.REQUESTOR asc;: p0 = 10775 <- Questa è la SQL che viene emesso dalla query sopra. –

0

Hai provato con il nuovo fornitore integrato Linq in NH 3.0?

Quello vecchio è molto limitata.