【发布时间】:2014-11-11 20:38:50
【问题描述】:
我有这个简单的表达式来获取每个订单的金额:
public IQueryable<Orders> GetAccountSummery()
{
return context.Orders.GroupBy(a => new { orderNo = a.orderNo })
.Select(b => new
{
orderNo = b.Key.orderNo,
amount = b.Sum(r => r.amount)
});
}
我需要获取上一个表达式返回的记录总数:
SQL
select COUNT(1) from
(
SELECT orderNo,SUM(amount) Amount
FROM Orders
group by orderNo
)tbl -- I get 125,000 row count here
EF
public int GetOrdersCount()
{
return GetAccountSummery().Count(); // This guy here gives 198,000 rows which counts all rows from orders table
// The following line gives the correct row count:
return GetAccountSummery().AsEnumerable().Count(); // 125,000 row
}
GetAccountSummery().AsEnumerable().Count() 的问题在于它首先在服务器端运行查询然后在客户端计算正确的行数(请考虑此处的表大小)
有什么方法可以在不执行 select 语句的情况下只获得正确的计数?
编辑
如果 groupBy 子查询无法做到这一点,那为什么 Where 子查询可以做到这一点?
【问题讨论】:
标签: c# sql-server entity-framework linq-to-entities