2010-09-09 19 views
6

He intentado obtener valores distintos utilizando Linq para NHibernate y estoy fallando miserablemente.¿Cómo puedo obtener valores distintos usando Linq a NHibernate?

He intentado:

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

return query.Distinct(); 

Así como

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

return query.Distinct(new RequestorComparer()); 

Dónde RequestorComparer es

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 
} 

No importa lo estructuro la sintaxis, parece que nunca para golpear el .Distinct(). Sin .Distinct(), hay varios duplicados de forma predeterminada en la tabla que estoy consultando, por orden de 195 registros totales, pero solo se deben devolver 22 valores distintos.

No estoy seguro de lo que estoy haciendo mal, pero agradecería mucho cualquier ayuda que se pueda proporcionar.

Gracias

+0

¿Qué sql son esas consultas de linq que generan? –

+0

¿Por qué no lo denuncia como un error? – Paco

Respuesta

1

He encontrado que los siguientes trabajos (NHibernate v3.3.1).

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

Nota: Esto utiliza el proveedor de Linq integrado 'Query ' en NHibernate 3.0. La pregunta original se refiere al proveedor NHibernate.Linq que ya no es compatible. – Phill

1

Trate de reordenamiento a:

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

    select requesters; 

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

he visto problemas con el ordenamiento de OrdenarPor y distinto.

Avísame si eso no te sirve.

+0

Intenté eso, todavía no funcionó bien. Estoy obteniendo los mismos resultados exactos que antes. –

+0

SELECCIONE this_.REQUESTORID como FK8_0_0_, this_.REQUESTOR como REQUESTOR0_0_ FROM REQUESTORS this_ WHERE this_.REQUESTORID =: p0 PEDIDO POR this_.REQUESTOR asc;: p0 = 10775 <- Este es el SQL que genera la consulta anterior. –

0

¿Has probado con el nuevo proveedor integrado de Linq en NH 3.0?

El anterior es muy limitado.

Cuestiones relacionadas