说我有这样的汇总表:如何选择多列的聚合(无分组)?
AcitivityCache
(
pkId (bigint, PK),
Date (DateTime),
OfficeId (int, FK)
TransactionCount (int),
RejectCount (int),
InvitationCount (int),
RequestCount (int)
...
--more counts here--
...
)
现在我需要将总的计数在一段时间内的取(不分组的办公室,只是总结),我可以用这样的SQL操作:
SELECT SUM(TransactionCount) as TotalTxCount, SUM(RejectCount) as TotalRejectCount, ...
FROM ActivityCache
WHERE [Date] between '2011-02-01' and '2012-02-01'
我该如何用linq实现? 到目前为止,我看到的大多数解决方案都有一些分组。但对于这种情况,我不需要分组,只是总数。我可以这样做:
DateTime dateFrom, toDate; // initialized later
...
var q = dbContext.ActivityCaches
.Where(a=> a.Date > fromDate && a.Date <= toDate)
.GroupBy(a=> 1)
.Select(g=> new
{
TotalTransactionCount = g.Sum(a => a.TransactionCount),
TotalRejectCount = g.Sum(a => a.RejectCount),
...
...
});
或者,我可以先取列,然后以编程方式取总数。 或者,我可以使用SP(不喜欢在这种情况下)。 任何更好的想法(没有分组)?
PS:我不会成为能够改变DB模式
那么,T-SQL是*隐含*做分组操作,它只是所有的记录都在同一组,这是一样的,你用你的'的GroupBy(做什么a => 1)'。你有什么特别的理由不喜欢这个吗? – AakashM 2012-02-13 09:23:17
没有理由不喜欢:)。我只是想知道是否有更多的方法。 – mshsayem 2012-02-14 03:14:04