Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 在linq中按日期分组_Linq To Sql - Fatal编程技术网

Linq to sql 在linq中按日期分组

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

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

您应该根据
可空值的年份进行分组

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很棒。你的猜测完全正确。非常感谢我的朋友。我想我离这里只有一步之遥。我不知道如何把马特的评论作为答案