在LINQ asp.net MVC中将可空日期时间转换为字符串时出错
本文关键字:转换 时间 日期 字符串 出错 asp LINQ net MVC | 更新日期: 2023-09-27 18:12:38
我正在开发一个带有剑道UI的asp.net MVC系统。我必须从View中的过滤器按钮发送一个"日期"到控制器并过滤LINQ。我使用了以下代码:
public ActionResult Grid_ReadLogAdminList([DataSourceRequest] DataSourceRequest request, string filterDate)
{
DateTime _temp;
if (!DateTime.TryParse(filterDate, out _temp))
_temp = DateTime.Now;
return Json(_context.Entities<LogAdmin>().NoTracking().OrderByDescending(l => l.TimeStamp)
.Where(f => f.TimeStamp.Value.ToString("dd.MM.yyyy") == _temp.ToString("dd.MM.yyyy"))
.Select(l => new LogAdminInfo
{
Id = l.Id,
Message = l.Message,
MessageTemplate = l.MessageTemplate,
Level = l.Level,
TimeStamp = l.TimeStamp,
Exception = l.Exception,
Properties = l.Properties,
LogEvent = l.LogEvent,
})
.ToDataSourceResult(request));
}
,但它给了我一个错误的"。where"。你应该知道时间戳字段是"datetime?"
我收到这个错误:
LINQ to Entities不能识别方法System。字符串ToString()'方法,并且该方法不能转换为store表达式。
如何修复错误?
这个错误非常表明LINQ to Entities不支持ToString方法,您应该使用另一种方法比较您的日期。
根据您的代码,我假设您只对DateTime的日期部分感兴趣,以便进行比较,因此我建议您尝试DbFunctions。TruncateTime方法:
Where(f => DbFunctions.TruncateTime(f.TimeStamp) == DbFunctions.TruncateTime(_temp))
replace
.Where(f => f.TimeStamp.Value.ToString("dd.MM.yyyy") == _temp.ToString("dd.MM.yyyy"))
.Where(f => DbFunctions.TruncateTime(f.TimeStamp) == _temp)
var tempDate = _temp.ToString("dd.MM.yyyy")
Json(_context.Entities<LogAdmin>().NoTracking().OrderByDescending(l => l.TimeStamp)
.Select(l => new LogAdminInfo
{
Id = l.Id,
Message = l.Message,
MessageTemplate = l.MessageTemplate,
Level = l.Level,
TimeStamp = l.TimeStamp.Value.ToString("dd.MM.yyyy"),
Exception = l.Exception,
Properties = l.Properties,
LogEvent = l.LogEvent,
}).Where(l => l.TimeStamp = tempDate).Select(l)
.ToDataSourceResult(request));