【问题标题】:Linq to entities query that returns a count and a list of objectsLinq to entity 查询返回计数和对象列表
【发布时间】:2015-01-27 17:59:08
【问题描述】:

是否可以创建一个 linq to entity 查询,它可以为我提供查询中事物的总数以及其中一些项目的列表?

例如,如果查询不受约束将返回 40,000 个项目,但我只想要 500 个项目的第 5 页,则对象会说 Count = 40,000List<items> 将只包含 500 个项目。

【问题讨论】:

    标签: c# linq entity-framework linq-to-entities


    【解决方案1】:

    这里的代码返回特定客户的订单数量,然后是这些订单的“页面”。 (这将检索订单 501 到 600。)

    Customer[] CustomerList;
    int CustomerID;
    var x = CustomerList
       .Where(r => r.CustomerID == CustomerID)
       .Select(r => new { 
          OrderCount = r.Orders.Count(), 
          OrderPageList = r.Orders.Skip(500).Take(100).ToArray() });
    int totalCount = x.OrderCount;
    Order[] orderList = x.OrderPageList;
    

    【讨论】:

      【解决方案2】:

      是的,这是可能的(这里的另一个例子:Better way to query a page of data and get total count in entity framework 4.1?),但不推荐。它通常需要人为的查询构造来获取一个 LINQ 语句中的计数和数据(大卫的回答通过仅选择子项来规避这一点)。

      您最好创建一个IQueryable 并分别获取其计数和分页子集。

      更好的是,将PagedList 添加到您的项目中并使用如下代码:

      var prd = Products.Where(p => p.Categories.Any(c => c.CategoryName == "Sports" ));
      var page = prd.OrderBy(p => p.Name).ToPagedList(5,500);
      

      这只是执行计数和Skip/Take 查询以获取包含 500 个项目的所有页面的第 5 页。

      结果,IPagedList<T>,是一个IEnumerable<T>,它具有一些有用的属性,例如HasNextPagePageCount

      【讨论】:

        猜你喜欢
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        相关资源
        最近更新 更多