C# LINQ to实体无法识别MVC5中的方法“System.DateTime ParseExact(System.String、System.String、System.IFormatProvider)”错误

C# LINQ to实体无法识别MVC5中的方法“System.DateTime ParseExact(System.String、System.String、System.IFormatProvider)”错误,c#,entity-framework,linq,datetime,asp.net-mvc-5,C#,Entity Framework,Linq,Datetime,Asp.net Mvc 5,嗨,我有一个叫DailyVisitReport的视图。在这个视图中,我有两个字段叫做FromDate和toDate。如果我选择FromDate,则ToDate取决于日期,它将在与部分视图相同的视图中显示包含数据的表 现在jquery中的FromDate和ToDate日期格式是dd-M-y01-Mar-16 在Db中,我还将日期格式更改为01-Mar-16字符串 我的模型访问者查看模型 我的控制器代码 现在我选择FromDate和ToDate,它显示下面提到的错误 LINQ to实体无法识别方法“

嗨,我有一个叫DailyVisitReport的视图。在这个视图中,我有两个字段叫做FromDate和toDate。如果我选择FromDate,则ToDate取决于日期,它将在与部分视图相同的视图中显示包含数据的表

现在jquery中的FromDate和ToDate日期格式是dd-M-y01-Mar-16

在Db中,我还将日期格式更改为01-Mar-16字符串

我的模型访问者查看模型

我的控制器代码

现在我选择FromDate和ToDate,它显示下面提到的错误

LINQ to实体无法识别方法“System.DateTime ParseExactSystem.String,System.String,System.IFormatProvider” 方法

我无法将v.VisitingDate从字符串格式转换为日期格式

我尝试了Convert.ToDateTime和Convert.ToParse所有东西。但我还是犯了个错误。请任何人理解我的问题并帮助我解决此问题。

属性VisitingDate应为DateTime类型,以避免这些问题。不要使用字符串mishmash比较日期时间值,请使用日期时间类型

然后,where条件看起来是这样的

where v.VisitingDate.HasValue ?
    v.VisitingDate.Value >= fromdt && v.VisitingDate.Value <= todt
  : 
    ... // put a condition here when visiting date has no value in DB
这里还有一个LINQ to SQL中支持/不支持的方法列表,我假设LINQ to实体也是如此:


因此,您不能使用Parse…

Linq to Entities查询中的所有操作都转换为sql。 无法将DateTime.Parse转换为sql,因此出现错误


在where之外执行解析以专门解决该问题,但更一般地说,您也应该将VisitingDate设置为DateTime属性。

为什么不使用v.VisitingDate.Date与fromdt.Date进行比较?好的,我尝试了一下,让您知道diiIn Db,我还将日期格式更改为01-Mar-16字符串错误。您应该将日期存储为DateTime对应的数据库类型,而不是字符串。之前,在数据库中,数据库中的日期格式为2016-02-03 00:00:00.000,我通过ReplaceConvertvarchar50,vf.VisitingDate,6,“-”数据库中日期格式为2016-02-03 00:00:00.000,我通过ReplaceConvertvarchar50,vf.VisitingDate,6,”,“-”作为VisitingDate显示您模型的访问日期定义,你不需要在这里用字符串替换东西。您需要做的就是首先将传入参数转换为DateTimes,就像您已经做的那样,然后确保要比较的DB列也是DateTime.public Nullable VisitingDate{get;set;}@Susan查看我的编辑where条件,然后看起来像…如何执行任何示例查询??
public ActionResult GetDatesfromFromDateToDate(string fromDate, string toDate)
{
    CultureInfo provider = CultureInfo.InvariantCulture; 
    var fromdt = Convert.ToDateTime(fromDate);
    var  todt = Convert.ToDateTime(toDate);
    List<View_VisitorsForm> VisitCount = (from v in db.View_VisitorsForm where DateTime.ParseExact(v.VisitingDate,"dd-M-y", provider) >= fromdt && DateTime.ParseExact(v.VisitingDate,"dd-M-y",provider) <= todt select v).ToList();
    VisitorsViewModel visitotsVM = new VisitorsViewModel();
    visitotsVM.Visits = VisitCount;
    return PartialView("_Visitors", visitotsVM);
}
where v.VisitingDate.HasValue ?
    v.VisitingDate.Value >= fromdt && v.VisitingDate.Value <= todt
  : 
    ... // put a condition here when visiting date has no value in DB