Запрос LINQ для выбора первой пятерки

У меня есть запрос LINQ:

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

Как я могу изменить этот запрос, чтобы выбрать только пять результатов из базы данных?

Ответ 1

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

Ответ 2

Решение:

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

Ответ 3

Это также может быть достигнуто с использованием подхода Linq, основанного на лямбда;

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

Ответ 4

[Предлагаем несколько более описательный ответ, чем ответ, предоставленный @Ajni.]

Это также может быть достигнуто с помощью LINQ свободного синтаксиса:

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

Обратите внимание, что каждый метод (Where, OrderBy, Take), который появляется в этом операторе LINQ, принимает значение lambda expression в качестве аргумента. Также обратите внимание, что документация для Enumerable.Take начинается с:

Возвращает указанное количество смежных элементов с начала Последовательность.

Ответ 5

Additional information

Иногда необходимо привязать модель к моделям представлений и дать ошибку преобразования типа. В этой ситуации вы должны использовать метод 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();

Ответ 6

Просто думая, что вы, возможно, не знакомы с последовательностью From- > Where- > Select, как в sql script, это похоже на Выбрать- > От- > Где.

Но вы, возможно, не знаете, что внутри Sql Engine он также анализируется в последовательности ' От- > Где- > Выбрать'. Чтобы проверить его, вы можете попробовать простой script

select id as i from table where i=3

и это не сработает, причина в том, что движок будет анализировать Где до Выбрать, поэтому он не будет знать псевдоним я в , где > . Чтобы выполнить эту работу, вы можете попробовать

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

Ответ 7

LINQ Query для выбора 5 лучших записей.

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