按日期分组在linq

时间:2011-03-28 13:11:17

标签: linq-to-sql

我在sql server中有一个带有datetime null字段的表。我正在尝试根据该字段中的年份对结果进行分组。但是,当我编写linq查询时,当我键入该字段时,我没有获得Year的intellisense。它只显示HasValue和Value。我认为因为它是转换为可空的类型。在这种情况下如何进行分组?

2 个答案:

答案 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键下(或您选择代表不存在的年份场景的任何值)。