Как получить название месяца из столбца datetime в Linq для SQL? - PullRequest
6 голосов
/ 04 марта 2012

В моей таблице есть столбец DateTime.

В запросе Linq to SQL мне нужна только часть месяца этого поля

Как написать для этого запрос Linq?

Ответы [ 3 ]

6 голосов
/ 04 марта 2012

Ну, есть три варианта, о которых я могу сразу подумать:

  • Извлечь весь DateTime назад, затем извлечь месяц и отформатировать его на стороне клиента
  • ИспользоватьDateTime.Month чтобы извлечь только месяц назад из базы данных, а затем отформатировать его на стороне клиента
  • Попробуйте получить форматирование (преобразование в текст) для работы с базой данных

ЛичноЯ бы не попробовал бы третий вариант - мне кажется, что он вряд ли сработает, по крайней мере без особых усилий.

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

Обратите внимание, что если вы все еще хотите, чтобы результаты были представлены в виде запроса, вы можете использовать AsEnumerable, чтобы принудительно выполнить оставшуюся часть запроса на стороне клиента.Например:

var query = db.Customers
              .Where(c => c.OrderCount > 500) // Or whatever query you want
              .Select(c => new { c.Name, c.FirstOrder })
              .AsEnumerable() // Do the rest of the query on the client
              .Select(c => new { c.Name, c.Month = c.FirstOrder.ToString("MMM") });

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, имеет смысл использовать DateTime.Month на стороне сервера, если это действительно повлияет на результаты , например

var query = db.Customers.Where(c => c.FirstOrder.Month == 1)
                        ...

... но в этих случаях я ожидаю, что это будет числовое значение, а не имя месяца.

1 голос
/ 04 марта 2012

Что-то вроде:

string monthName = dataContext.GetTable<TableName>()
                              .FirstOrDefault(t => t.DateTimeColumn)
                              .ToString("MMM");               
0 голосов
/ 10 января 2019

Вам необходимо преобразовать таблицу в тип Enumerable с помощью ToList(), поскольку вы не можете использовать ToString() для типа запроса.

var result = from sales in SalesOrderHeaders.ToList()
    select new {
        Sales_Order_ID = sales.SalesOrderID,
        Territory_ID = sales.TerritoryID,
        Month = sales.OrderDate.ToString("MMMM"),
        Year = sales.OrderDate.Year
};
result.Dump();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...