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);