我正在从一些REST路由返回分页,过滤结果。如果我简化我的代码,它就是这样的:
var query = db.SomeTable.Where(row => row.SomeProperty > 42);
return new Result {
data = query.Skip(skip ?? 0).Take(take ?? 25).ToList(),
count = query.Count() };
这样可行,但它会对SQL Server数据库产生两个查询:一个用于获取数据,另一个用于计算数据。如何在一个查询中执行此操作而不使用手写的T-SQL查询?
答案 0 :(得分:0)
尝试:
var query = db.SomeTable.Where(row => row.SomeProperty > 42);
return query.Select (q => new{q, Total = db.SomeTable.Count()})
.Skip(skip ?? 0).Take(take ?? 25).ToList();
修改强>
这很糟糕!它最终将返回每条记录的计数,但如果你想用一个数据库点击它就可以这样做