【发布时间】:2012-02-13 03:50:47
【问题描述】:
假设我有一个这样的汇总表:
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(在这种情况下不喜欢)。 任何更好的想法(没有分组)?
P.S:我无法更改数据库架构
【问题讨论】:
-
嗯,T-SQL 是隐式进行分组操作,只是所有记录都在同一个组中,这与您对 @ 所做的操作相同987654324@。你有什么特别的理由不喜欢这样吗?
-
没有理由不喜欢 :)。我只是想知道是否还有更多方法。
标签: c# .net linq entity-framework linq-to-entities