Linq to Sql - формат даты и времени - ГГГГ-МММ (2009-март) - PullRequest
4 голосов
/ 11 марта 2009

Я хочу написать запрос Linq to Sql, который подсчитывает и группирует по имени пользователя и дате и времени. Я хочу, чтобы DateTime был отформатирован следующим образом: «ГГГГ-МММ» (т.е. 2009-март).

Я думал, что это будет работать, но Linq to Sql не может разобрать аргумент "format" ToString.

            dc.MyTable
              .GroupBy(r => new
              {
                  Name = r.UserName,
                  YearMonth = r.SomeDateTime.ToString("yyyy-MMM")
              })
              .Select(r => new
              {
                  Name = r.UserName,
                  YearMonth = r.YearMonth,
                  Count = r.Count()
              })
              .OrderBy(r => r.YearMonth)
              .ThenBy(r => r.Name);

У кого-нибудь есть мысли / предложения?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 11 марта 2009

Интересно, разве вы не должны делать это "длинным" путем ...

          dc.MyTable
          .GroupBy(r => new
          {
              Name = r.UserName,
              Year = r.SomeDateTime.Year,
              Month = r.SomeDateTime.Month
          })
          .Select(r => new
          {
              Name = r.UserName,
              Year = r.Year,
              Month = r.Month,
              Count = r.Count()
          })
          .OrderBy(r => r.Year)
          .ThenBy(r => r.Month)
          .ThenBy(r => r.Name);

Если вам нужен формат в виде строки, сделайте это позже в пользовательском интерфейсе. Либо путем восстановления DateTime и т. Д., Либо с использованием CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(...).

3 голосов
/ 11 марта 2009

Я бы не стал превращать что-либо в строку в базе данных. Сгруппируйте по r.SomeDateTime.Year и r.SomeDateTime.Month, упорядочив по году, затем по месяцу, а затем по имени, выбрав год и месяц отдельно (вместе со счетчиком), а затем, если вам нужно, выполнить проекцию на формат строки обратно в коде клиента .

Кстати, я подозреваю, что ваш второй OrderBy должен быть ThenBy - в настоящее время Name на самом деле самая важная вещь, которую вы заказываете.

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