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语句中出现的每个方法( WhereOrderByTake )都将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