Как представить t-sql convert (datetime, data, style) в запросе L2E? - PullRequest
0 голосов
/ 16 июня 2011

Как мне написать этот запрос в Linq для сущностей:

select convert(datetime,data,103) from Audit where ActionId = 1

Данные столбца имеют тип varchar (max). Я знаю, что если ActionId равен одному в строке, столбец данных в строке всегда будет содержать строку, представляющую дату в формате дд / мм / гггг.

Обновление

Мне нужно вернуть результат запроса L2E как IQueryable, потому что поверх него применяется разбиение на страницы / сортировка. Это еще одна причина, почему я хочу, чтобы это поле возвращалось как DateTime - чтобы можно было сортировать по нему.

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Я нашел это: Преобразование строки в Int в EF 4.0 Похоже, этот трюк может помочь, если мы создадим функцию для приведения строки в datetime.

ОБНОВЛЕНИЕ Эта проблема осталась для меня нерешенной.Поскольку мне нужно было быстрое решение, я преобразовал столбец «data» в тип datetime.Это не является общим для будущих расширений, но работает на данный момент.Одно из решений, которое на самом деле не является решением.

0 голосов
/ 16 июня 2011

Было бы проще отформатировать на клиенте, а не на сервере?

Я бы сделал что-то вроде этого:

var audits = db.Audit
    .Where(arg => arg.ActionId == 1)
    .Select(arg => new { arg.Data })
    .AsEnumerable()
    .Select(arg => DateTime.ParseExact(arg.Data, "dd/MM/yyyy", CultureInfo.InvariantCulture)
    .ToList();

Данные будут получены в строковом формате.
Послеизвлекаются строки, они будут преобразованы в DateTime.

...