C# LINQ查询选择前五名
我有一个LINQ查询:C# LINQ查询选择前五名,c#,linq,C#,Linq,我有一个LINQ查询: var list = from t in ctn.Items where t.DeliverySelection == true && t.Delivery.SentForDelivery == null orderby t.Delivery.SubmissionDate select t; var list = ctn.Items .Where(t=> t.DeliverySele
var list = from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t;
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
如何修改此查询以仅从数据库中选择五个结果?解决方案:
var list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5);
var list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5);
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
这也可以使用基于Lambda的Linq方法来实现
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
[提供的答案比提供的更具描述性。]
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);
请注意,此LINQ语句中出现的每个方法(Where
,OrderBy
,)都将a作为参数。另请注意,可枚举.Take
的文档以以下开头:
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
从一个数组的开头返回指定数量的连续元素
顺序
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
想想看,您可能对From->Where->Select序列感到陌生,就像在sql脚本中一样,它就像Select->From->Where.
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
但您可能不知道,在Sql引擎内部,它也是按照
“From->Where->Select”,要验证它,您可以尝试一个简单的脚本
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
select id as i from table where i=3
它将不起作用,原因是引擎将在选择之前解析Where,因此它不知道Where中的别名i。要使这项工作成功,您可以尝试
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
select * from (select id as i from table) as t where i = 3
附加信息
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
有时需要将模型绑定到视图模型中,并给出类型转换错误。在这种情况下,您应该使用ToList()
方法
var list = ctn.Items
.Where(t=> t.DeliverySelection == true && t.Delivery.SentForDelivery == null)
.OrderBy(t => t.Delivery.SubmissionDate)
.Take(5);
var list = (from t in ctn.Items
where t.DeliverySelection == true && t.Delivery.SentForDelivery == null
orderby t.Delivery.SubmissionDate
select t).Take(5).ToList();
+1,但是gah,将多行表达式包装在括号中,然后取消引用整批表达式,出于某种原因,这让我非常恼火。这似乎会从数据库中获取与相等条件匹配的结果,并且只有在从数据库中获取结果后,才会在应用程序中应用take(5)限制。有没有办法直接从数据库中获取前5行的内容?@jhicks没有。Take(5)命令只是向IQueryable添加了另一个条件,在您枚举它之前,它不会执行。但是,可能存在不支持Take操作的LINQ提供程序。@jHicks——这不是LINQ的工作方式。。。linq很懒。@HosseinSedghian,我想你是指Lambda表达式的编写方式:
ctn.Items.Where(t=>t.DeliverySelection==true&&t.Delivery.SentForDelivery==null)。OrderBy(t=>t.Delivery.SubmissionDate)。Take(5)
Take(你想要多少)