Группировка по DateTime.Date в Linq для SQL с EF 4.1 - PullRequest
5 голосов
/ 07 апреля 2011

Я пытаюсь выяснить, как сгруппировать каждый элемент по дням, когда он произошел, в диапазоне времени от Linq до SQL, но я не могу заставить его работать.

   var graph = from o in DB.Context.Occurances
            where o.Occurred > fromDate && o.Occurred <= toDate
            group o by o.Occurred.Date into g
            orderby g.Key ascending 
            select new
                       {
                           Date = g.Key,
                           Occurances = g.Count()
                       };

Каждый раз, когда я запускаю это, я получаю ошибку

«Указанный тип члена« Дата » не поддерживается в LINQ to Entities. Только инициализаторы, члены сущности и свойства навигации объекта поддерживается. "

Поиск Я нашел этот вопрос Здесь , который решает эту проблему ... но при запуске этого с помощью Entity Framework, я получаю исключение

"Функция не распознается SQL Сервер Компакт. [Название функции = TRUNCATETIME, Тип данных (если известен) = ] "

Любые идеи будут с благодарностью. Спасибо!

Ответы [ 2 ]

1 голос
/ 14 мая 2015

Используйте DbFunctions.TruncateTime (o.Occurred), чтобы получить дату в LINQ to SQL.

1 голос
/ 07 апреля 2011

Единственное известное мне решение, которое наверняка сработает, - это вручную выбрать объединение свойств Year, Month, Day, используя String.Concat или целочисленную арифметику, и сгруппировать по ним.

Источник: Метод CLR для сопоставления канонических функций

...