C# “如何修复”;LINQ to实体无法识别方法';System.DateTime GetValueOrDefault()'&引用;?

C# “如何修复”;LINQ to实体无法识别方法';System.DateTime GetValueOrDefault()'&引用;?,c#,linq,datetime,linq-to-entities,C#,Linq,Datetime,Linq To Entities,我有这个密码。基本上,我需要改变日期,并告诉用户,今天,商店将从上午10点开放到晚上10点。所以这里的时间是固定的 发件人:- 今天\u date=“2020-03-23T00:00:00” 开始时间=“1900-01-01T10:00:00” 结束时间=“1900-01-01T22:00:00” 更改为:- start_newdatetime=“2020-03-23T10:00:00” end_newdatetime=“2020-03-23T22:00:00” 现在的问题是错误。因为我希望它在

我有这个密码。基本上,我需要改变日期,并告诉用户,今天,商店将从上午10点开放到晚上10点。所以这里的时间是固定的

发件人:-

今天\u date=“2020-03-23T00:00:00”

开始时间=“1900-01-01T10:00:00”

结束时间=“1900-01-01T22:00:00”

更改为:-

start_newdatetime=“2020-03-23T10:00:00”

end_newdatetime=“2020-03-23T22:00:00”

现在的问题是错误。因为我希望它在同一个变量上

“消息”:“发生错误。”,“异常消息”:“LINQ to” 实体无法识别方法的System.DateTime
GetValueOrDefault()方法,而此方法无法转换为 存储表达式。“,“ExceptionType”: “System.NotSupportedException”


但是如果我创建另一个var来返回新值,那就没问题了。

您的表达式似乎不起作用,因为成员
GetValueOrDefault
TimeOfDay
不可用于EF-DB查询转换,因此您必须设法解决这个问题。目前我无法验证,但我认为以下几点应该是可能的

var find_date=bdb.tbl_store
.Join(bdb.tbl_hour,a=>a.start_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.Join(bdb.tbl_hour,a=>a.a.end_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.其中(x=>x.a.a.store\u id==store\u id)
托利斯先生()
.选择(x=>new{
x、 a.a.商店标识,
开始时间=x.a.b.小时时间,
结束时间=x.b.小时时间,
start\u newdatetime=todaysdate.Date+x.a.b.hour\u time.GetValueOrDefault().TimeOfDay,
end_newdatetime=todaysdate.Date+x.b.hour_time.GetValueOrDefault().TimeOfDay
}).ToList();
这样,您的查询在调用
ToList
时运行,其他所有内容(传递给
Select
的Lambda表达式)在客户端上以普通C#形式执行,因此实体没有理由抱怨。诚然,我不确定在调用
ToList
时这些对象是否已完全解析。如果不是这样,你可以这样做

var find_date=bdb.tbl_store
.Join(bdb.tbl_hour,a=>a.start_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.Join(bdb.tbl_hour,a=>a.a.end_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.其中(x=>x.a.a.store\u id==store\u id)
.选择(x=>new{
x、 a.a.商店标识,
开始时间=x.a.b.小时时间,
结束时间=x.b.小时时间
})
托利斯先生()
.选择(x=>new{
商店标识,
开始时间,
结束时间,
start\u newdatetime=todaysdate.Date+start\u hour\u time.GetValueOrDefault().TimeOfDay,
end\u newdatetime=todaysdate.Date+end\u hour\u time.GetValueOrDefault().TimeOfDay
}).ToList();

您的表达式似乎不起作用,因为成员
GetValueOrDefault
TimeOfDay
不可用于EF DB查询转换,因此您必须设法解决这个问题。目前我无法验证,但我认为以下几点应该是可能的

var find_date=bdb.tbl_store
.Join(bdb.tbl_hour,a=>a.start_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.Join(bdb.tbl_hour,a=>a.a.end_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.其中(x=>x.a.a.store\u id==store\u id)
托利斯先生()
.选择(x=>new{
x、 a.a.商店标识,
开始时间=x.a.b.小时时间,
结束时间=x.b.小时时间,
start\u newdatetime=todaysdate.Date+x.a.b.hour\u time.GetValueOrDefault().TimeOfDay,
end_newdatetime=todaysdate.Date+x.b.hour_time.GetValueOrDefault().TimeOfDay
}).ToList();
这样,您的查询在调用
ToList
时运行,其他所有内容(传递给
Select
的Lambda表达式)在客户端上以普通C#形式执行,因此实体没有理由抱怨。诚然,我不确定在调用
ToList
时这些对象是否已完全解析。如果不是这样,你可以这样做

var find_date=bdb.tbl_store
.Join(bdb.tbl_hour,a=>a.start_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.Join(bdb.tbl_hour,a=>a.a.end_hour_id,b=>b.hour_id,(a,b)=>new{a,b})
.其中(x=>x.a.a.store\u id==store\u id)
.选择(x=>new{
x、 a.a.商店标识,
开始时间=x.a.b.小时时间,
结束时间=x.b.小时时间
})
托利斯先生()
.选择(x=>new{
商店标识,
开始时间,
结束时间,
start\u newdatetime=todaysdate.Date+start\u hour\u time.GetValueOrDefault().TimeOfDay,
end\u newdatetime=todaysdate.Date+end\u hour\u time.GetValueOrDefault().TimeOfDay
}).ToList();

根据判断,您应该能够使用
(x.a.b.hour\u time??TimeSpan.Zero)
。我从这个答案尝试过,它不起作用。我不能简单地加上??在x.a.b.hour_时间之后,因为它将返回错误。它返回什么错误?在这种情况下,我将投票重新打开,但您应该编辑您的问题,以提及此新错误。:)旁注:只在客户端(不是SQL)运行该操作要容易得多…根据判断,您应该能够使用
(x.a.b.hour\u time??TimeSpan.Zero)
。我从这个答案开始尝试过,它不起作用。我不能简单地加上??在x.a.b.hour_时间之后,因为它将返回错误。它返回什么错误?在这种情况下,我将投票重新打开,但您
DateTime todaysdate = DateTime.Now.Date;       

var find_date = bdb.tbl_store
        .Join(bdb.tbl_hour, a => a.start_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Join(bdb.tbl_hour, a => a.a.end_hour_id, b => b.hour_id, (a, b) => new { a, b })
        .Where(x => x.a.a.store_id == store_id )
        .Select(x => new {

        x.a.a.store_id,
        start_hour_time = x.a.b.hour_time,
        end_hour_time = x.b.hour_time,
        start_newdatetime = todaysdate.Date+ x.a.b.hour_time.GetValueOrDefault().TimeOfDay,
        end_newdatetime = todaysdate.Date + x.b.hour_time.GetValueOrDefault().TimeOfDay

    }) .ToList();