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>
,它具有一些有用的属性,例如 HasNextPage
或 PageCount
。
是否可以创建一个 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>
,它具有一些有用的属性,例如 HasNextPage
或 PageCount
。