C# DateTime到字符串转换显示错误

C# DateTime到字符串转换显示错误,c#,linq,datetime,C#,Linq,Datetime,我正在尝试使用自定义格式将DateTime转换为string。但它向我显示了LINQ错误 LINQ to Entities无法识别方法“System.String ToString(System.String)”方法,并且无法将此方法转换为存储表达式 以下是我在控制器中的代码: public ActionResult DaywiseData(DateTime date) { try { var att = db.Attendances

我正在尝试使用自定义格式将
DateTime
转换为
string
。但它向我显示了
LINQ
错误

LINQ to Entities无法识别方法“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);
     }
}

您的LINQ被转换为不支持ToString()的SQL查询。将其保留为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);
     }
}

之所以出现错误,是因为select中的
表达式被转换为SQL并在数据库服务器上运行,这就是它无法识别
DateTime.Parse(s.InTime.ToString()).ToString(“HH:mm tt”)
方法的原因。您有两种选择:

在执行
之前,请更新代码以具体化查询结果。选择

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);

或者使用@Nino的答案

尝试使用SqlFunctions.StringConvert; 像这样,

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

怎么了?你能更新答案吗?@AkshayKhandelwal OP已经发布了错误。上面给出了错误。你为什么要做这些解析和格式化工作?什么是
InTime
类型?您试图实现什么?但为什么需要它?您已经将其作为
InTime
属性的一部分。。。即使您确实需要它,为什么要将
DateTime
转换为字符串,然后再次解析它呢
s.InTime.ToString(“HH:mm tt”)
会稍微有点道理,尽管我认为如果您使用的是
tt
,您并不真正想要
HH
。(你真的希望晚上7点是
19:00
?)
DateTime.Parse(s.InTime.ToString())
不是必需的,
s.InTime
已经是
DateTime
。如果
InTime
可以为null,该怎么办?att.ForEach(a=>a.DateTimeString=a.DateTime.HasValue?a.DateTime.ToString(“HH:mm”):string.Empty);