Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-获取a的行数(按子查询分组)_C#_Sql Server_Entity Framework_Linq To Entities - Fatal编程技术网

C# 实体框架-获取a的行数(按子查询分组)

C# 实体框架-获取a的行数(按子查询分组),c#,sql-server,entity-framework,linq-to-entities,C#,Sql Server,Entity Framework,Linq To Entities,我有一个简单的表达式来计算每个订单的金额: 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) }); }

我有一个简单的表达式来计算每个订单的金额:

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)
   });
}
环境足迹

GetAccountSummery.AsEnumerable.Count的问题是,它首先在服务器端运行查询,然后在客户端计算正确的行计数,考虑这里的表大小

有没有办法只获取正确的计数而不执行select语句

编辑


如果groupBy子查询无法做到这一点,为什么它是针对Where子查询的?

您当前的结构方式?不可以。您将始终执行.Selectstatement,因为.Count采用立即执行,请参阅。但是,.Count还有一个覆盖,它接受Func,您应该能够使用它来获取计数,而不必先执行select,因此:

context.Orders.GroupBy(a => new { orderNo = a.orderNo })
              .Count(a => a.Key.orderNo != string.Empty);
编辑:哎呀,忘了那是一个笨蛋。据此编辑


编辑2:根据评论,我认为这是不可能的,因为你总是需要在任何给定的时间在那里选择,并且.Count将始终调用它。很抱歉。

我在count func上收到此消息:无法隐式地将类型int转换为bool,这意味着count参数应该是boolsence orderNo是int我尝试了Counta=>a.Key.orderNo!=0我得到了同样不正确的结果198000..奇怪的是,执行了以下SQL:从SELECT COUNT1中选择[GroupBy1].[A1]作为[C1]从[dbo].[Orders]作为[Extent1],其中0[Extent1].[orderNo]作为[GroupBy1],但仍然没有按ORDERNOTH进行分组这很好。谢谢兄弟的帮助
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
}
context.Orders.GroupBy(a => new { orderNo = a.orderNo })
              .Count(a => a.Key.orderNo != string.Empty);