LINQ查询select前五名
我有一个LINQ查询:
var list = from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t;
我怎样才能修改这个查询来从数据库中只select五个结果?
var list = (from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t).Take(5);
解决scheme:
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 stream利的语法来实现:
var list = ctn.Items .Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null) .OrderBy(t => t.Delivery.SubmissionDate) .Take(5);
请注意,在此LINQ语句中出现的每个方法( Where
, OrderBy
, Take
)都将lambdaexpression式作为参数。 另请注意, Enumerable.Take
的文档始于:
从序列的开始处返回指定数量的连续元素。
只是想你可能会觉得不熟悉序列From-> Where-> Select,就像在sql脚本中一样,它就像Select-> From-> Where。
但是你可能不知道在Sql Engine里面,它也是按照从From-> Where-> Select的顺序parsing的,为了validation它,你可以尝试一个简单的脚本
select id as i from table where i=3
它不会工作,原因是引擎将parsing之前select ,所以它不会知道别名我在哪里 。 为了使这个工作,你可以尝试
select * from (select id as i from table) as t where i = 3