我在sql server中有一个带有datetime null字段的表。我正在尝试根据该字段中的年份对结果进行分组。但是,当我编写linq查询时,当我键入该字段时,我没有获得Year的intellisense。它只显示HasValue和Value。我认为因为它是转换为可空的类型。在这种情况下如何进行分组?
答案 0 :(得分:2)
您应该对Nullable<DateTime>
所以
group obj by obj.DateTimeField.Value.Year into g
答案 1 :(得分:0)
另外,请记住,当没有值时,nullable类型的.Value
属性可能会抛出InvalidOperationException
(因为数据库中的字段为NULL
)。< / p>
在这种情况下,您可以过滤掉空值:
var filteredGroups = rows.Where(row => row.DateTimeField.HasValue)
.GroupBy(row => row.DateTimeField.Value.Year);
...或者返回null值;在一些虚拟钥匙下说:
var nullValuesPresent = rows.GroupBy(row => row.DateTimeField.HasValue
? row.DateTimeField.Value.Year : -1);
...在上面的示例中,将分组在-1
键下(或您选择代表不存在的年份场景的任何值)。