說我有這樣的彙總表:如何選擇多列的聚合(無分組)?
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