LINQ查询选择前五名

时间:2011-02-02 09:55:56

标签: c# linq

我有一个LINQ查询:

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

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

6 个答案:

答案 0 :(得分:393)

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

答案 1 :(得分:36)

解决方案:

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

答案 2 :(得分:19)

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

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

答案 3 :(得分:7)

[提供比the answer提供的@Ajni更具描述性的答案。]

这也可以使用LINQ fluent syntax

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

请注意,此LINQ语句中显示的每个方法(WhereOrderByTake)都将lambda expression作为参数。另请注意,Enumerable.Take的文档以:

开头
  

从a的开头返回指定数量的连续元素   序列

答案 4 :(得分: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();

答案 5 :(得分:1)

只是觉得你可能不熟悉序列From-&gt; Where-&gt; Select,就像在sql脚本中一样,它就像 Select-&gt; From-&gt; Where。

但是你可能不知道在Sql Engine里面,它也是按顺序解析的 &#39; From-&gt; Where-&gt;选择&#39;,要验证它,您可以尝试一个简单的脚本

select id as i from table where i=3

并且它不起作用,原因是引擎会在选择之前解析 Where ,因此它不会在中知道别名 / strong>即可。为了使这项工作,您可以尝试

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