如何使用LINQ比较匿名实体类型中的日期时间.实体无法识别ToDateTime方法



我创建了一个匿名实体,如下所示:

var Results = (from c in db.SlotConfig
join dm in db.DailyMeters on
new { c.SlotID, c.SiteID } equals new { dm.SlotID, dm.SiteID }
select new {
Location = c.Location,
Manufacturer = c.ManufacturerName,
GameName = c.GameName,
GamingDay = dm.GamingDay,
... 
});

其中游戏日是可为null的DateTime(DateTime?(。

稍后,我必须只获得特定游戏日的结果,因此使用

例如var startResults = Results.Where(r => r.GamingDay.Value == Convert.ToDateTime("2018-06-11 00:00:00.000"));,并且它触发异常。

当我做Results = Results.Where(m => m.SiteID == 1)这样的事情时,它运行得非常好。SiteID是可以为null的int,所以我想它适用于基元类型。

我检查了类似的情况,但实际上没有任何地方可以解释为什么它不起作用。

提前谢谢。

我想您得到的异常是类似于"LINQ实体不知道Convert.ToDateTime(("?这完全正常,因为实体框架正试图将您的表达式转换为SQL查询,但SQL中不存在Convert.ToDateTime(或者不是这样…(。因此,在将其传递给查询之前,您必须创建DateTime

试试这样的东西:

var myDate = Convert.ToDateTime("2018-06-11 00:00:00.000");
var startResults = Results.Where(r => r.GamingDay.Value == myDate);

它应该会变戏法。

一点解释:通过这种方式,您将向EF传递一个已知类型的值(这里是DateTime(,而不是一个函数,因此EF将表达式转换为SQL查询"更容易"。

最新更新