tutorial sintaxis framework espaƱol ejemplos consultas consulta anidadas c# linq

c# - sintaxis - linq select



LINQ consulta para seleccionar los cinco primeros (6)

Tengo una consulta LINQ:

var list = from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t;

¿Cómo puedo modificar esta consulta para seleccionar solo cinco resultados de la base de datos?


Esto también se puede lograr utilizando el enfoque basado en Lambda de Linq;

var list = ctn.Items .Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null) .OrderBy(t => t.Delivery.SubmissionDate) .Take(5);


La solución:

var list = (from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t).Take(5);


Pensar que puede que no se sienta familiarizado con la secuencia From-> Where-> Select, como en sql script, es como Select-> From-> Where.

Pero es posible que no sepa que dentro de Sql Engine, también se analiza en la secuencia de '' From-> Where-> Select '', para validarlo, puede probar un script simple

select id as i from table where i=3

y no funcionará, la razón es que el motor analizará Where antes de Select , por lo que no sabrá el alias i en dónde . Para que esto funcione, puedes intentarlo.

select * from (select id as i from table) as t where i = 3


[Ofreciendo una respuesta algo más descriptiva que la respuesta proporcionada por .]

Esto también se puede lograr usando la sintaxis fluida de LINQ:

var list = ctn.Items .Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null) .OrderBy(t => t.Delivery.SubmissionDate) .Take(5);

Tenga en cuenta que cada método ( Where , OrderBy , Take ) que aparece en esta declaración LINQ toma una expresión lambda como argumento. También tenga en cuenta que la documentación para Enumerable.Take comienza con:

Devuelve un número especificado de elementos contiguos desde el inicio de una secuencia.


Additional information

A veces es necesario vincular un modelo a un modelo de vista y dar un error de conversión de tipo . En esta situación debes usar el método ToList() .

var list = (from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t).Take(5).ToList();


var list = (from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t).Take(5);