2016-12-29 55 views
0

我想用自定義格式將DateTime轉換爲string。但它顯示我LINQ錯誤日期時間到字符串轉換顯示錯誤

LINQ到實體無法識別方法「System.String的ToString(System.String)」的方法,而這種方法不能被翻譯成店表達。

這是我在控制器代碼:

public ActionResult DaywiseData(DateTime date) 
{ 
    try 
    { 
     var att = db.Attendances 
       .Where(d => d.Date == date) 
       .Select(s => new AttendanceViewModel 
        { 
         Date = s.Date, 
         aa = DateTime.Parse(s.InTime.ToString()).ToString("HH:mm tt"), //Error is not showing after removing this line 
         InTime = s.InTime, 
         OutTime = s.OutTime, 
         EmployeeName = s.Employee.Name, 
         EmployeeUsername = s.Employee.Username 
        }) 
        .ToList(); 
     return Json(att); 
    } 
    catch (Exception ex) 
    { 
     return Json(ex.Message); 
    } 
} 
+0

什麼是錯誤?你能更新答案嗎? –

+0

@AkshayKhandelwal OP已經發布了錯誤.. –

+0

上面給出的錯誤。 –

回答

2

你的LINQ被翻譯成SQL查詢不支持的ToString()。將其保留爲DateTime並稍後轉換爲字符串。這樣

public ActionResult DaywiseData(DateTime date) 
{ 
    try 
    { 
     var att = db.Attendances 
       .Where(d => d.Date == date) 
       .Select(s => new AttendanceViewModel 
        { 
         Date = s.Date, 
         DateTime = s.InTime, //dateTime property 
         DateTimeString = string.Empty //string property 
         InTime = s.InTime, 
         OutTime = s.OutTime, 
         EmployeeName = s.Employee.Name, 
         EmployeeUsername = s.Employee.Username 
        }) 
        .ToList(); 
     att.ForEach(a => a.DateTimeString = a.DateTime.ToString("HH:mm tt")); 

     return Json(att); 
    } 
    catch (Exception ex) 
    { 
     return Json(ex.Message); 
    } 
} 
+1

'DateTime.Parse(s.InTime.ToString())'不是必需的,'s.InTime'已經是'DateTime'了。 –

+0

現在工作..很多感謝 –

+0

如果'InTime'是'Nullable'怎麼辦? –

1

東西,你會得到錯誤,因爲裏面你選擇的Expression轉換爲SQL和數據庫服務器上運行,這就是爲什麼它不承認DateTime.Parse(s.InTime.ToString()).ToString("HH:mm tt")方法。你有兩個選擇:

更新你的代碼兌現您的查詢的結果做.Select前:

var att = db.Attendances 
    .Where(d => d.Date == date) 
    .ToList() // Here 
    .Select(s => new AttendanceViewModel 
     { 
      Date = s.Date, 
      aa = DateTime.Parse(s.InTime.ToString()).ToString("HH:mm tt"), //Error is not showing after removing this line 
      InTime = s.InTime, 
      OutTime = s.OutTime, 
      EmployeeName = s.Employee.Name, 
      EmployeeUsername = s.Employee.Username 
     }) 
     .ToList(); 
return Json(att); 

或者使用@尼諾的回答

1

嘗試使用SqlFunctions.StringConvert; 像這樣;

aa = DateTime.Parse(SqlFunctions.StringConvert(s.InTime)), //Error is not showing after removing this line