LINQ查询选择前五名

我有一个LINQ查询:

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

如何修改此查询以从数据库中只选择五个结果?

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

解决方案:

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

这也可以使用Linq的基于Lambda的方法来实现;

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

[提供比更有描述性的答案,答案@Ajni.]

这也可以使用LINQ 流利的语法实现:

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

注意,这个LINQ语句中出现的每个方法(WhereOrderByTake)都以lambda表达式作为参数。还要注意,Enumerable.Take的文档是以:

返回指定数量的连续元素 序列。< / p >

只是认为你可能会觉得不熟悉的序列From->Where->Select,在sql脚本中,它就像从——>选择- >。

但是你可能不知道,在Sql Engine内部,它也是按顺序解析的 要验证它,您可以尝试一个简单的脚本

select id as i from table where i=3

并且它不会工作,原因是引擎会在选择之前解析在哪里,所以它不会知道在哪里中的别名i。要做到这一点,你可以试试

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

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