如何在投射到另一种类型时使用EF维护延迟执行?

时间:2010-01-13 18:08:48

标签: c# entity-framework linq-to-entities

我正在使用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中管理数据分页。

感谢。

1 个答案:

答案 0 :(得分:0)

var appointmentGridItems = from a in appointmentRepository.ListAppointments().AsEnumerable()
                           select new AppointmentGridItemViewModel(a);  

......会做的。是的,这仍然是推迟的。 ToArrayToList不会被推迟; AsEnumerable是。

如果您可以执行以下操作:

var appointmentGridItems = from a in appointmentRepository.ListAppointments()
                           select new AppointmentGridItemViewModel
                           {
                               Appointment = a
                           };  

然后你可以在L2E中完全完成。有关更多示例,请参阅this post。 L2E支持POCO预测(即使在EF 1中);它只需要一个无参数的构造函数。