Ваше выражение, похоже, не работает, так как члены 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 })
.Where(x => x.a.a.store_id == store_id )
.ToList()
.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();
Таким образом, ваш запрос выполняется при вызове ToList
и всего остального (выражение Lambda передается Select
) выполняется на клиенте как простое C#, поэтому у Entity нет никаких оснований жаловаться. Правда, я точно не знаю, полностью ли разрешены эти объекты при вызове 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 })
.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
})
.ToList()
.Select(x => new {
store_id,
start_hour_time,
end_hour_time,
start_newdatetime = todaysdate.Date + start_hour_time.GetValueOrDefault().TimeOfDay,
end_newdatetime = todaysdate.Date + end_hour_time.GetValueOrDefault().TimeOfDay
}).ToList();