在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 asp.net MVC中将可空日期时间转换为字符串时出错

这个错误非常表明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));