我正在使用EF 4,我需要找到一种方法来维护延迟执行并将项目转换为另一种类型。
这是我现有的代码:
AppointmentRepository appointmentRepository = new AppointmentRepository();
var appointmentGridItems = from a in appointmentRepository.ListAppointments()
select new AppointmentGridItemViewModel(a);
此代码抛出以下运行时异常:
“LINQ to Entities中仅支持无参数构造函数和初始值设定项。”
还有其他方法来塑造linq语句来完成我的目标吗?
问题上下文(如果有任何关心或有任何限制):我需要将我的约会列表序列化为JSON,但序列化EF ObjectSet会导致JSON中出现循环引用错误。我的存储库的结果必须是可延迟的,因为我使用的网格组件(来自Telerik的ASP.NET MVC控件)需要它,以便可以在DB而不是View中管理数据分页。
感谢。
答案 0 :(得分:0)
var appointmentGridItems = from a in appointmentRepository.ListAppointments().AsEnumerable()
select new AppointmentGridItemViewModel(a);
......会做的。是的,这仍然是推迟的。 ToArray
或ToList
不会被推迟; AsEnumerable
是。
如果您可以执行以下操作:
var appointmentGridItems = from a in appointmentRepository.ListAppointments()
select new AppointmentGridItemViewModel
{
Appointment = a
};
然后你可以在L2E中完全完成。有关更多示例,请参阅this post。 L2E支持POCO预测(即使在EF 1中);它只需要一个无参数的构造函数。