选择“N”行并使用Entity Framework获取行数

时间:2015-05-18 05:44:12

标签: sql-server entity-framework

目前我们有一个页面需要分页,所以我需要2个信息     1.获取总行数
    2.获取'N'行数

目前我正在使用2个查询,第1步类似于

 count = db.Transactions
           .AsNoTracking()
           .Where(whereClause
           .Count();

然后是

db.Transactions
           .AsNoTracking()
           .Where(whereClause
           .Skip(skipRows)
           .Take(pagesize)
           .ToList();

有没有办法优化它?

2 个答案:

答案 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();