我创建了一个匿名实体,如下所示:
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查询"更容易"。