VS 2013,EF6 Code First
我正在使用此代码并且工作正常:
var timeslots = Vehicle.VehicleTimeSlots.Where(t =>
t.CreateDate.Date <= currentDate.Date
&& (t.DeleteDate == null || t.DeleteDate.Value.Date > currentDate.Date)
&& t.DayOfWeek == dayOfWeek).OrderBy(t => t.StartTime);
但是,如果我尝试这样做,我会收到运行时错误“LINQ to Entities不支持指定的类型成员'Date'。仅支持初始化程序,实体成员和实体导航属性。” ( db 是我的DbContext的一个实例):
var previousReservation = db.ReservationTimeSlots.SingleOrDefault(t =>
t.ReservationDate.Date == reservationTimeslot.ReservationDate.Date
&& t.VehicleTimeSlotId == reservationTimeslot.VehicleTimeSlotId);
关于这个问题还有很多其他问题我知道我可以在后面的代码中使用DbFunctions.TruncateTime()(我现在正在做)。我猜不同的是,第一位代码是针对Vehicle实体对象操作的,而第二位代码是直接针对DbContext操作的。它们不是LINQ to Entities吗?
答案 0 :(得分:3)
你回答了自己的问题。你是对的,第一个查询是针对内存中对象(Vehicle
)运行的,因此你可以使用任何属性/功能。
而第二个LINQ表达式将被转换为基础数据源语言(可能是SQL),而每个表达式在实体框架中没有等效的转换。
它们不是LINQ to Entities吗?
不,第一个是LINQ to objects,LINQ中的第二个表达式是实体。