2010-01-13 22 views
1

我正在使用EF 4,我需要找到一种方法来保持延迟执行和项目到另一种类型。如何在投影到其他类型时使用EF保持延迟执行?

这是我的现有代码:

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

此代码引发以下运行时异常:“只有参数构造函数初始化和LINQ中支持到实体”

是否有任何其他方式来塑造linq语句来完成我所追求的?我需要将我的约会列表序列化为JSON,但是序列化EF ObjectSet会导致JSON中的循环引用错误。如果有任何问题或者它有任何问题,请执行以下操作:我的存储库结果必须是可延迟的,因为我使用的网格组件(来自Telerik的ASP.NET MVC控件)要求它可以在数据库而不是视图中管理数据分页。

谢谢。

回答

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中);它只需要一个无参数的构造函数。

+0

感谢您的答复并纠正我对Enumerable的知识。 – user250066 2010-01-13 19:48:03