группировать по дате в linq - PullRequest
1 голос
/ 28 марта 2011

У меня есть таблица с нулевым полем datetime на сервере sql. Я пытаюсь сгруппировать результаты по годам в этой области. Но когда я написал linq-запрос, я не получил intellisense для Year при вводе этого поля. Он показывает только HasValue и Value. Я думаю, потому что это преобразованный обнуляемый тип. Как мне сделать группировку в этом случае?

Ответы [ 2 ]

2 голосов
/ 28 марта 2011

Вы должны сгруппировать по Году значения Nullable<DateTime>, поэтому

group obj by obj.DateTimeField.Value.Year into g
0 голосов
/ 28 марта 2011

Кроме того, имейте в виду, что при доступе к свойству .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 (или любым другим значением, которое вы выберете для представления сценария несуществующего года).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...