Linq to entities 查询 returns 计数和对象列表

Linq to entities query that returns a count and a list of objects

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

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

这是 returns 特定客户订单数量的代码,然后是 'page' 这些订单的代码。 (这将检索订单 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;

是的,这是可能的(这里的另一个例子: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