2013-08-01 125 views
-1

我有一個SQL表,介紹了能量消耗值的歷史。 現在我需要執行一些查詢以便按小時,星期,星期,月份和年份獲得統計數據,當然每個數據都是相互分開的。 一個查詢的例子是:按日期排序和按天排序

from c in context.ConsumptionSet 
join e in context.EquipmentSet on c.EquipmentID equals e.EquipmentID 
orderBy c.Date 
group new { c, e } by c.Date into grp 
select new 
{ 
    date = grp.Key.Day, 
    value = grp.GroupBy(i => i.e.EquipmentID).Sum(g => g.Max(i => i.c.Value)) 
}) 

一個你可以看到,我想按日期排序第一的名單(這是一個DateTime類型),然後按天分組。 但是,上述查詢沒有提供例外結果。 我在那裏錯過了什麼?

+0

你得到了什麼結果? –

+0

問題可能在於'group'正在破壞'orderBy'強加的命令。 ([參考](http://stackoverflow.com/questions/204505/preserving-order-with-linq)) –

+0

確切地說,我沒有得到預期的順序,只是隨機值..所以我應該在什麼爲了得到期望的結果? – mahoosh

回答

0

假設您使用日期和時間存儲值,那麼按照它們進行分組幾乎沒有影響。要分組,您需要有相同的值才能分組。

例如:

Id | Date 
---+------------------------ 
1 | 2013-01-01 1:23:45.333 
2 | 2013-01-01 2:34:56.667 

通過Date分組不會幫助,因爲這些值是不同的。相反,我需要一些更有意義的東西,也許白天。

要在實體框架中執行此操作,請使用EntityFunctionsSqlFunctions類中的方法。例如:

from foo in context.Whatever 
group foo by EntityFunctions.TruncateTime(foo.Date) into grp 
... 

現在您按照日期進行分組。由於這兩行都在2013-01-01上,它們將被組合在一起。