Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询选择前五名_C#_Linq - Fatal编程技术网

C# 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

我有一个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.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(你想要多少)