Linq to sql 在linq中按日期分组
我在sql server中有一个datetime字段为空的表。我正试图根据该领域的年份对结果进行分组。但是,当我编写linq查询时,当我键入该字段时,我已经有一年没有得到intellisense了。它只显示HasValue和Value。我认为这是因为它是可转换为null的类型。在这种情况下如何进行分组?您应该根据Linq to sql 在linq中按日期分组,linq-to-sql,Linq To Sql,我在sql server中有一个datetime字段为空的表。我正试图根据该领域的年份对结果进行分组。但是,当我编写linq查询时,当我键入该字段时,我已经有一年没有得到intellisense了。它只显示HasValue和Value。我认为这是因为它是可转换为null的类型。在这种情况下如何进行分组?您应该根据可空值的年份进行分组 group obj by obj.DateTimeField.Value.Year into g 另外,请记住,访问类型的.Value属性可能会在没有值时抛出in
可空值的年份进行分组
group obj by obj.DateTimeField.Value.Year into g
另外,请记住,访问类型的.Value
属性可能会在没有值时抛出invalidooperationexception
(如数据库中的in-field为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
键下(或您选择用于表示不存在的年份场景的任何值)。您可以向我们显示查询吗?我猜是DateTimeField.Value.Year
@Matt Ellen很棒。你的猜测完全正确。非常感谢我的朋友。我想我离这里只有一步之遥。我不知道如何把马特的评论作为答案