it-swarm.com.de

LINQ-Abfrage zur Auswahl der fünf besten

Ich habe eine LINQ-Abfrage:

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

Wie kann ich diese Abfrage ändern, um nur fünf Ergebnisse aus der Datenbank auszuwählen?

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

Die Lösung:

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

Dies kann auch mit dem Lambda-basierten Ansatz von Linq erreicht werden.

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

[Bietet eine etwas aussagekräftigere Antwort als die Antwort bereitgestellt von @ Ajni .]

Dies kann auch mit LINQ fließende Syntax erreicht werden:

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

Beachten Sie, dass jede Methode (Where, OrderBy, Take ), die in dieser LINQ-Anweisung vorkommt, einen Lambda-Ausdruck benötigt als Argument. Beachten Sie auch, dass die Dokumentation für Enumerable.Take beginnt mit:

Gibt eine angegebene Anzahl zusammenhängender Elemente ab dem Beginn einer Sequenz zurück.

7
DavidRR

Additional information

Manchmal ist es notwendig, ein Modell in ein Ansichtsmodell zu binden und ein Typkonvertierungsfehler anzugeben. In dieser Situation sollten Sie die Methode ToList() verwenden.

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

Ich denke nur, Sie sind mit der Sequenz From-> Where-> Select möglicherweise nicht vertraut, wie im SQL-Skript mit Select-> From-> Where.

Aber Sie wissen vielleicht nicht, dass es in Sql Engine auch in der Reihenfolge 'From-> Where-> Select' analysiert wird. Um es zu validieren, können Sie ein einfaches Skript versuchen

select id as i from table where i=3

und es wird nicht funktionieren, der Grund dafür ist, dass die Engine Where vor Select parst, sodass sie den Alias ​​i in where nicht kennt. Damit dies funktioniert, können Sie es versuchen

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