2016-08-24 2 views
1

У меня есть столбец datetime2 в базе данных. Я пытаюсь извлечь из базы данных, и я хочу отобразить его в виде как строку.Преобразование datetime2 в строку ("dd/MM/yyyy") в LINQ

Я пробовал: dt.ToString("dd/MM/yyyy");

Но это дало ошибку.

Исключение типа «System.NotSupportedException» произошло в EntityFramework.SqlServer.dll, но не был обработан в пользовательском коде

Дополнительная информация: LINQ к Entities не распознает метод «System.String ToString (System.String) ', и этот метод не может быть переведен в выражение хранилища.

Я также попробовал String.Format("{0:y yy yyy yyyy}", dt);, даже это забросило ошибку.

Error

+0

Какая ошибка? – squill25

+0

показать мне ошибку, пожалуйста? –

ответ

1

Я думаю, что понимаю вашу проблему после публикации скриншота. Некоторым функциям не разрешено запускать внутри linq, так как linq необходимо перевести их в sql.

Поскольку я не могу скопировать свой код с моими изменениями (вам необходимо выполнить форматирование даты вне инструкции linq, используя ли цикл foreach или любой другой метод). Грубая идея:

allclient = (from .... 
      select new AllClient() 
      { 
       ... 
       PurchaseDT = "", 
       PurchaseDate = k.PurchaseDate, //the formatting will be done later 
      } 
foreach (AllClient c in allclient) 
     c.PurchaseDT = String.Format("{0:y yy yyy yyyy}", c.PurchaseDate); //or whatever other formatting you want 

где PurchaseDate имеет тип DateTime и PurchaseDT имеет тип строки.

Сначала сохраните значение, исходящее из db, в переменную datetime, а затем перейдем через список, используя цикл foreach, преобразуем переменную datetime в строку и присваиваем ее строковой переменной.

Обновлено

Единственный способ будет включать в себя вы добавив еще одну переменную в класс AllClient, если вы можете. Это будет DateTime для временного хранения даты, а другая - как строка (как показано в фрагменте кода выше), который будет обновляться с форматированной датой после оператора linq.

ИЛИ

Держите один DateTime PurchaseDT, и вместо форматирования в LINQ или сразу же после этого, только отформатировать его, когда вы показываете его. Например, если вы показываете записи на какой-либо таблице, при отображении столбца даты сделайте форматирование на PurchaseDT.

+0

Это дает ошибку 'DateTime не содержит определения для значения.' –

+0

Здесь снова возникает другая проблема. Если PurchaseDT имеет тип DateTime, он выдаст ошибку в LINQ. Если это строка, она выдаст ошибку в цикле foreach. –

+0

Can вы обновляете свой ответ, чтобы я мог отметить его как принятый ответ. –

7

вы можете проверить этот сайт: click here

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); 

String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year 
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month 
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day 
String.Format("{0:h hh H HH}",  dt); // "4 04 16 16"  hour 12/24 
String.Format("{0:m mm}",   dt); // "5 05"   minute 
String.Format("{0:s ss}",   dt); // "7 07"   second 
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction 
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes 
String.Format("{0:t tt}",   dt); // "P PM"   A.M. or P.M. 
String.Format("{0:z zz zzz}",  dt); // "-6 -06 -06:00" time zone 

и в основном, в entityframework не имеет ни малейшего представления о том, как перевести объект System.Threading.Tasks.Task к SQL statement.you можно использовать:

SqlFunctions.StringConvert(dt) 

или перед использованием ToString(), используйте .tolist():

.ToList().select(p=>new{date=dt.ToString()}); 
+0

Это не сработало для меня –

+1

, вы должны получить свои основные столбцы в параметре allclient и в другом параметре использовать allclient.tolist(). Select (p => new {purchaseDt = String.Format ("{0: y yy yyy yyyy }», k.PurchaseDate)}); –

+0

Невозможно получить значение столбца DateTime как строку в PurchaseDt во allclient ?? –

0

попробовать это:

dt.ToString("d");

обратите внимание: формат "d" является культура в курсе, но это дает вам короткий шаблон даты.

0
DateTime dt = DateTime.ParseExact(<datetime string from db>, <format of date in Datetime string from db>, CultureInfo.InvariantCulture); 
string formattedDate = dt.ToString("dd/MM/yyyy",CultureInfo.InvariantCulture); 

Сначала вы должны преобразовать DateTime строку в объект DateTime, то вы можете конвертировать в необходимый формат. Перегрузка ToString вы используете справедливо для DateTime объекта, а не для String object.That причины для ошибки

0

Вы можете использовать это для Вида:

@model.RegisteredDate.ToString("dd MMMM , yyyy") 

Это даст 21 August , 2016 из формата ,
Если вы обратитесь к 21 Aug , 2016, просто используйте «MMM»

+0

Не можем ли мы получить его в этом формате 24/08/2016? –

+0

Да просто используйте @ model.RegisteredDate.ToString ("dd/MM/yyyy") –

Смежные вопросы