2016-10-11 50 views
0

我想知道如何僅以時間格式使用關於日期時間類型的組。如何在Linq中僅使用時間格式進行分組

select CONVERT(VARCHAR(10), a.tempDay, 108) as returnDay, b.qty from table1  as a inner join table2 as b on (a.id = b.id) 
where a.id = 100 
group by CONVERT(VARCHAR(10), a.tempDay, 108), b.qty 

實際上,tempDay是DateTime類型(YYYY-MM-DD HH:MM:SS)。在這種情況下,我只是想只groupping 「HH:MM:SS」 使用LINQ格式。

+0

你嘗試過什麼嗎? –

+0

當你想比較* times *時,不要轉換爲字符串。使用'cast(tempday as time)'來獲取時間值。您也可以爲可添加到索引的時間創建一個單獨的列。 –

回答

1
var datesByTime = from d in dates 
        group d by d.TimeOfDay.ToString(@"hh\:mm\:ss") into g 
        select new { Time = g.Key, Dates = g.ToList() }; 

日期是日期時間的收集,日期時間擁有財產的TimeOfDay返回時間跨度該日期的,所有你需要做的分組依據的TimeOfDay。 您還需要.ToString(@「hh:mm:ss」)刪除毫秒。

+0

原始SQL語句應該被重寫以反映* this * LINQ語句 - 通過'cast(tempday as time)'組並且避免文本轉換 –

+0

var datesByTime =從日期中的d 組d通過d.ToLongTimeString()轉換爲g 選擇新的{Time = g.Key,Dates = g.ToList()}; – Cogent

+0

你有沒有注意到'entity-framework'標籤?雖然這將是一個很好的LINQ to Objects解決方案,但是在LINQ to Entities中它只是生成着名的'NotSupportedException' - *「在LINQ to Entities中不支持指定的類型成員'TimeOfDay'。」* –

相關問題