我有一个LINQ查询:
var list = from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t;
我该如何修改这个查询以从数据库中仅选择五个结果?
我有一个LINQ查询:
var list = from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t;
我该如何修改这个查询以从数据库中仅选择五个结果?
var list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5);
Take
是通过使用延迟执行来实现的。立即返回的值是一个对象,它存储执行操作所需的所有信息。由此方法表示的查询直到通过直接调用其 GetEnumerator 方法或使用 foreach 枚举该对象时才会执行。 - Christopher Hamkinsvar list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5);
也可以使用基于 lambda 的 LINQ 方法来实现此目的;
var list = ctn.Items
.Where(t => t.DeliverySelection == true &&
t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
这也可以使用LINQ 流畅语法来实现:
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
Where
、OrderBy
、Take
)都将 lambda 表达式 作为参数。还请注意,Enumerable.Take
的文档以以下内容开头:
从序列的开头返回指定数量的连续元素。
额外信息
有时需要将一个模型绑定到视图模型中,并出现类型转换错误。在这种情况下,应使用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();
我在想你可能对于 SQL 脚本中的序列 From->Where->Select 感到不太熟悉,但实际上它的顺序是Select->From->Where。
但是你可能不知道,在 SQL 引擎内部,它也是按照From->Where->Select 的顺序进行解析。为了验证它,你可以尝试一个简单的脚本:
select id as i from table where i=3
但这样是行不通的。原因是引擎会在解析选择之前解析条件,所以它不会知道条件中的别名i
。为了使其正常工作,您可以尝试
select * from (select id as i from table) as t where i = 3