web-dev-qa-db-fra.com

Requête LINQ pour sélectionner le top cinq

J'ai une requête LINQ:

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

Comment puis-je modifier cette requête pour ne sélectionner que cinq résultats dans la base de données?

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

La solution:

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

Ceci peut également être réalisé en utilisant l'approche Lambda de Linq;

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

[Offre une réponse un peu plus descriptive que la réponse fournie par @ Ajni .]

Ceci peut également être réalisé en utilisant LINQ syntaxe fluide :

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

Notez que chaque méthode (Where, OrderBy, Take ) qui apparaît dans cette instruction LINQ prend un expression lambda en argument. Notez également que la documentation de Enumerable.Take commence par:

Renvoie un nombre spécifié d'éléments contigus à partir du début d'une séquence.

7
DavidRR

Additional information

Parfois, il est nécessaire de lier un modèle à une vue modèles et de donner un erreur de conversion de type. Dans cette situation, vous devez utiliser la méthode 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();
_
5
topcool

Vous pensez peut-être que vous ne vous sentirez pas familier avec la séquence From-> Where-> Select, comme dans le script SQL, c'est comme Select-> De-> Où.

Mais vous ne pouvez pas savoir que dans Sql Engine, il est également analysé dans la séquence de 'From-> Where-> Select', Pour le valider, vous pouvez essayer un script simple.

select id as i from table where i=3

et cela ne fonctionnera pas, la raison en est que le moteur analysera Where avant Select, afin qu'il ne connaisse pas l'alias i dans le Where. Pour que cela fonctionne, vous pouvez essayer

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