首页 文章

LINQ查询选择前五名

提问于
浏览
197

我有一个LINQ查询:

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

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

6 回答

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

    解决方案:

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

    这也可以使用Linq的基于Lambda的方法来实现;

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

    [提供比@Ajni提供的the answer更具描述性的答案 . ]

    这也可以使用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 的文档以:

    从序列的开头返回指定数量的连续元素 .

  • 372

    Additional information

    有时需要将模型绑定到视图模型中并给出 type conversion error . 在这种情况下,您应该使用 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();
    
  • 2

    只是觉得你可能不熟悉序列From-> Where-> Select,就像在sql脚本中一样,它就像 Select->From->Where.

    但你可能不知道在Sql Engine里面,它也按照' From->Where->Select '的顺序进行解析,要验证它,你可以尝试一个简单的脚本

    select id as i from table where i=3
    

    它不起作用,原因是引擎会在 Select 之前解析 Where ,所以它不会在 where 中知道别名 . 为了使这项工作,你可以尝试

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

相关问题