是否可以创建一个linq to entity查询,该查询将为我提供查询中的事物总数,以及其中一些项目的列表?
例如,如果无约束的查询会返回40,000个项目,但我只想要500个项目的第5页,对象会说Count = 40,000
而List<items>
只包含500个项目。
答案 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>
,其中包含HasNextPage
或PageCount
等有用的属性。