2016-05-11 3 views
0

Я пытаюсь преобразовать поле datetime в строку. Сообщение об ошибке, которое я получил, найдено ниже. Вы видели это раньше? Я не получаю решения. Как я могу это решить, пожалуйста?Преобразование поля времени даты в строку в linq

  public IEnumerable<SelectListItem> GetStatusDate(string strprojectId) 
        { 
         var queryResult = (from dt in _objContext.tbl_Project_Status_MSTR 
          where dt.ProjectID.Equals(strprojectId) 
          orderby dt.ProjectID 
          select new SelectListItem {Text = Convert.ToString(dt.StatusDate),Value = Convert.ToString(dt.StatusDate)}); 
         List<SelectListItem> objStatDate = queryResult.ToList(); 

         return objStatDate; 
        } 

LINQ к Entities не распознает метод 'System.String ToString (System.DateTime)' метод, и этот метод не может быть переведен в выражение магазина.

+0

Вы можете использовать 'dt.StatusDate.ToString()', который будет преобразован в выражение. – vendettamit

ответ

1

Один из способов сделать это является запрос StatusDate из базы данных, а затем преобразовать его в строку в памяти, как это:

var objStatDate = 
    (from dt in _objContext.tbl_Project_Status_MSTR 
    where dt.ProjectID.Equals(strprojectId) 
    orderby dt.ProjectID 
    select new {dt.StatusDate}) 
    .ToList() //Execute database query 
    .Select(x => 
     new SelectListItem 
     { 
      Text = Convert.ToString(x.StatusDate), //Convert data in memory 
      Value = Convert.ToString(x.StatusDate) 
     }) 
    .ToList(); 
+0

Большое спасибо всем. Теперь он работает с решением выше. Ценить это. – user2320476

+0

Смогу ли я отрезать время от кода выше? – user2320476

+0

Да. Я думаю, вы можете сделать это как на стороне базы данных (есть специальные функции, которые переводят на функции SQL (см. [DbFunctions] (https://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions (v = vs.113) .aspx))) и на локальной стороне с помощью 'x.StatusDate.Date'. –

0

Используйте этот

List<string> ListOfDateString = (from dt in ListOfDateTime let str=dt.ToString() select str).ToList(); 
0

EF не имеют соответствующую функцию базы данных для Convert.ToString(), поэтому она выплевывает эту ошибку.

Самый простой способ - сделать что-то вроде этого, которое сначала попадает в базу данных только для получения даты, а затем преобразуется в строку, когда все это в памяти, как обычная коллекция.

    var queryResult = (from dt in _objContext.tbl_Project_Status_MSTR 
         where dt.ProjectID.Equals(strprojectId) 
         orderby dt.ProjectID 
         select dt.StatusDate) 
         .AsEnumerable() 
         .Select(d => new SelectListItem {Text = Convert.ToString(d),Value = Convert.ToString(d)}); 

Хотя я бы рекомендовал использовать d.ToString() вместо того, чтобы преобразовать, тем более, что вы можете использовать строку форматирования и прочее, что путь. Вы также можете просто пощекотать .ToList() в конце запроса и вернуть это вместо того, чтобы делать это на следующей строке.

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