estoy aprendiendo acerca de LINQ a SQL y todo iba bien hasta que algo extraño sucedió:DISTINCT() y orderBy tema
Traté de hacer un ejemplo de distinct
, por lo que, mediante el dabatase Neptuno escribí el siguiente consulta:
var query =
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
};
Si imprimo el SQL generado por LINQ a SQL para la consulta almacenada en query
se ve así:
SELECT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ORDER BY [t0].[CustomerID]
Por lo tanto, como de costumbre, la consulta trae todos los CustomerID
para cada Order
en la tabla Orders
ordenada alfabéticamente.
¡Pero! Si utilizo el método Distinct()
así:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
La consulta trae los resultados esperados de la cláusula Distinct
, pero los CustomerID
s no están clasificadas pesar de que escribí orderby o.CustomerID
!
La consulta SQL para esta segunda consulta LINQ es la siguiente:
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
Como podemos ver en la cláusula ** ORDER BY
no se encuentra. ¿Porqué es eso?
¿Por qué la cláusula ORDER BY
desaparece cuando utilizo el método Distinct()
?
Como acotación al margen de sintaxis lambda es mucho más simple para las consultas de este tipo: 'var query = db.Orders.Select (o => o .CustomerId) .Distinct(); ' – asawyer