Перевод оператора SQL с датами в Linq-to-Sql для использования с EF4 - PullRequest
1 голос
/ 25 января 2011

У меня есть следующая команда SQL:

SELECT        CONVERT(varchar, Logged, 103) AS Visited, COUNT(ID) AS Totals
FROM            tblStats
GROUP BY CONVERT(varchar, Logged, 103)
ORDER BY Visited DESC

Я хочу перевести это в оператор L2S, который можно использовать с Entity Framework, но при работе с типами datetime я получаю различные ошибки в зависимости от того, как я пытаюсь атаковать проблему.

Подход:

var results = from s in db.Stats
      group s by (s.Logged.Date.ToString()) into Grp
      select new { Day = Grp.Key, Total = Grp.Count() };

Ошибка:

LINQ to Entities не распознает метод 'System.String ToString ()' метод, и этот метод не может быть переведено в магазинное выражение.

Подход:

var results = from s in db.Stats
              group s by (s.Logged.Date) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };

Ошибка:

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

Какой синтаксис мне нужен, чтобы запрос работал?

Ответы [ 2 ]

1 голос
/ 25 января 2011

Попробуйте использовать метод EntityFunctions.TruncateTime :

var results = from s in db.Stats
              group s by EntityFunctions.TruncateTime(s.Logged) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };
0 голосов
/ 25 января 2011

Вам нужен раздел Date в s.Logged.Date?

Вы пробовали это:

var results = from s in db.Stats
              group s by (s.Logged) into Grp
              select new { Day = Grp.Key, Total = Grp.Count() };

Я предполагаю, что Logged является свойством (столбец втаблица).

РЕДАКТИРОВАТЬ: вы, ребята, способ быстро.

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