2010-01-13 56 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