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