我有一个LINQ查询:
var list = from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t;
如何修改此查询以从数据库中仅选择五个结果?
答案 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语句中显示的每个方法(Where
,OrderBy
,Take
)都将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