Linq to实体查询返回计数和对象列表

时间:2015-01-27 17:59:09

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

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

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

2 个答案:

答案 0 :(得分:2)

以下是返回特定客户的订单数量的代码,然后是这些订单的“页面”。 (这将检索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;

答案 1 :(得分:1)

是的可能(这里的另一个例子:Better way to query a page of data and get total count in entity framework 4.1?),但不推荐。它通常需要花哨的查询结构来获取一个LINQ语句中的计数和数据(David的答案通过仅选择子项来避免这种情况)。

您最好创建一个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等有用的属性。