2011-03-28 82 views
1

我在sql server中有一個帶datetime空字段的表。我試圖根據該領域的年份對結果進行分組。但是,當我編寫linq查詢時,當我鍵入該字段時,我沒有獲得年度智能感知。它只顯示HasValue和Value。我認爲是因爲它是可轉換類型的。我如何在這種情況下進行分組?在linq中按日期分組

+0

你能告訴我們查詢嗎?在猜測我會說'DateTimeField.Value.Year' – 2011-03-28 13:52:14

+0

@Matt埃倫偉大。你的猜測是絕對正確的。多謝了朋友。我想我只是一步之遙。 – 2011-03-28 14:13:56

+0

我不知道如何標記馬特的評論作爲回答 – 2011-03-28 14:23:06

回答

2

你應該在Nullable<DateTime>所以

group obj by obj.DateTimeField.Value.Year into g 
0

同樣價值的年級組,記住訪問您nullable類型的.Value財產可能會引發InvalidOperationException時沒有相應的價值(如在 - 場NULL在數據庫中)。

在這種情況下,您可以過濾掉空值:

var filteredGroups = rows.Where(row => row.DateTimeField.HasValue) 
         .GroupBy(row => row.DateTimeField.Value.Year); 

...或藏漢返回空值;在某些虛擬按鍵,說:

var nullValuesPresent = rows.GroupBy(row => row.DateTimeField.HasValue 
    ? row.DateTimeField.Value.Year : -1); 

...這在上面的例子中,將在-1鍵進行分組(或任何價值,你的選擇代表不存在的情況下一年)。