LINQ查询选择前五名

kfgdxczn  于 2023-05-20  发布在  其他
关注(0)|答案(6)|浏览(131)

我有一个LINQ查询:

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

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

z9zf31ra

z9zf31ra1#

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

tv6aics12#

解决方案:

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

fivyi3re3#

这也可以使用LINQ的基于lambda的方法来实现;

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

u5rb5r594#

这也可以使用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的文档开头是:
返回从序列开始的指定数目的连续元素。

  • (这提供了比Ajni提供的the answer更具描述性的答案。)*
4ktjp1zp

4ktjp1zp5#

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();
axkjgtzd

axkjgtzd6#

我只是觉得你可能对顺序From->Where->Select不熟悉,就像在SQL脚本中一样,它就像Select->From->Where
但你可能不知道,在SQL引擎内部,它也是按照'From->Where->Select'的顺序进行解析的。要验证它,您可以尝试一个简单的脚本,

select id as i from table where i=3

这行不通原因是引擎会在Select之前解析Where,所以不会知道where中的别名i。要想让这个工作顺利进行,你可以试试

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

相关问题