C # Linq datetime в строку "дд / мм / гггг" - PullRequest
0 голосов
/ 02 июля 2019

Я хочу преобразовать дату и время в строку с форматом "dd/mm/yyyy" в запросе linq инфраструктуры сущностей.

Я пытался использовать SqlFunctions. Это не дает мне правильный формат ("d/m/yyy")

Я не хочу писать запрос, а затем выполнить метод .toList (), а затем преобразовать дату и время в строку с помощью метода .ToString("dd/mm/yyyy").

Есть ли другие способы попробовать или я что-то упустил с SqlFunctions?

db.table.Select(i => new Data() {
     stringDate = SqlFunctions.DateName("dd", i.databaseData) + "/" +
               SqlFunctions.DatePart("m", i.databaseData) + "/" +
               SqlFunctions.DatePart("year", i.databaseData),
}).ToList()

EDIT:

Выполнение запроса ниже с помощью функции Stopwacht System.Diagnostics.Stopwatch.StartNew () занимает в 10 раз больше времени, чем предыдущий запрос

db.table.AsEnumerable().Select(i => new Data() {
    stringDate = String.Format("{0:dd/MM/yyyy}", i.databaseData),
}

1 Ответ

0 голосов
/ 03 июля 2019

Если вы имели в виду, что хотите, чтобы конечный результат был dd/mm/yyyy, то вы можете создать его вручную.

Использование трюка с функцией Right VisualBasic упрощает:

var ans = db.table.Select(i => new Data() {
     stringDate = Microsoft.VisualBasic.Strings.Right("0"+SqlFunctions.DatePart("d", i.databaseData), 2) + "/" +
               Microsoft.VisualBasic.Strings.Right("0"+SqlFunctions.DatePart("m", i.databaseData), 2) + "/" +
               Microsoft.VisualBasic.Strings.Right("000"+SqlFunctions.DatePart("year", i.databaseData), 2),
}).ToList();

Чтобы придерживаться C #, необходимо повторить выражения:

var ans2 = db.table.Select(i => new Data() {
     stringDate = (SqlFunctions.DatePart("d", i.databaseData).ToString().Length == 1 ? "0"+SqlFunctions.DatePart("d", i.databaseData) : SqlFunctions.DatePart("d", i.databaseData).ToString()) + "/" +
               (SqlFunctions.DatePart("m", i.databaseData).ToString().Length == 1 ? "0"+SqlFunctions.DatePart("d", i.databaseData) : SqlFunctions.DatePart("d", i.databaseData).ToString()) + "/" +
               ("000"+SqlFunctions.DatePart("year", i.databaseData)).Substring(SqlFunctions.DatePart("year", i.databaseData).ToString().Length-1),
}).ToList();
...