目前我们有一个页面需要分页,所以我需要2个信息
1.获取总行数
2.获取'N'行数
目前我正在使用2个查询,第1步类似于
count = db.Transactions
.AsNoTracking()
.Where(whereClause
.Count();
然后是
db.Transactions
.AsNoTracking()
.Where(whereClause
.Skip(skipRows)
.Take(pagesize)
.ToList();
有没有办法优化它?
答案 0 :(得分:2)
您可以尝试使用Local Data:
// Load all Transactions with filtering criteria into the context
db.Transactions.AsNoTracking().Where(whereClause).Load();
// Get Count
var transcationsCount = db.Transactions.Local.Count;
// Paging
var pagedTranscations = db.Transactions.Local.Skip(skipRows).Take(pageSize).ToList();
这应该只会导致在初始Load()
调用中向数据库触发一个数据库查询。
答案 1 :(得分:0)
这将返回一个IQueryable,你可以对它进行查询,每个都将执行到db。这样,每次要查询某些内容时都不必重写查询。
var query = (from t in db.Transactions
where whereClause
select t);
var count = query.Count();
var items = query
.Skip(skipRows)
.Take(pagesize)
.ToList();