2010-03-13 145 views
5

我有Entity Framework实体具有RSVP EntityCollection的事件。我想将RSVP的EntityCollection转换为POCO类RSVP的通用列表<>。如何将EntityCollection <T>转换为列表<POCOObj>

所以我想要EntityCollection - >列表。

要实现这一目标,最好的方法是什么?

到目前为止,我有这个(它缺少RSVP部分)

var events = from e in _entities.Event.Include("RSVP") 
        select new BizObjects.Event 
        { 
         EventId = e.EventId, 
         Name = e.Name, 
         Location = e.Location, 
         Organizer = e.Organizer, 
         StartDate = e.StartDate, 
         EndDate = e.EndDate, 
         Description = e.Description, 
         CreatedBy = e.CreatedBy, 
         CreatedOn = e.CreatedOn, 
         ModifiedBy = e.ModifiedBy, 
         ModifiedOn = e.ModifiedOn, 
         RSVPs = ??? 
        }; 

感谢。

+0

结帐这个[预测,包括(http://www.thejoyofcode.com/Projection_blows_includes_in_Entity_Framework。 aspx)博文。 – kervin 2010-03-13 08:52:16

回答

1

我建议您将“选择”代码放入扩展方法,命名为“ToPoco(此事件事件)”(您将用于单个“事件”转换)。

您还必须实现另一种扩展方法,用于多个“事件”转换,如List<BizObjects.Event> ToPoco(this List<Event> events)扩展,它只是在循环中调用BizObjects.Event Poco(this Event event)

之后,你的查询将是这样的:

var events = (from e in _entities.Event.Include("RSVP")).ToList().ToPoco(); 

关于回函:

你只正常创建像

List<BizObjects.RSVP> ToPoco(this List<RSVP> RSVPs)

的RSVP转换的另一扩展方法,然后您可以致电RSVPs = e.RSVPs.ToList().ToPoco()


解决方案可以直接安装到你的代码可能也类似的东西:

RSVPs = e.RSVPs.Select(rsvp => new RSVP { //do mapping }) 
+0

我试过你最后的解决方案,但必须添加.ToList来选择。但是,我得到一个EntityFramework错误,指出它不能转换ToList()。当我有机会时,我会在后面发布错误。 你已经指出我在正确的方向。谢谢! – 2010-03-13 09:09:39

0
var events = from e in _entities.Event.Include("RSVP") 
       select new BizObjects.Event 
       { 
        EventId = e.EventId, 
        Name = e.Name, 
        Location = e.Location, 
        Organizer = e.Organizer, 
        StartDate = e.StartDate, 
        EndDate = e.EndDate, 
        Description = e.Description, 
        CreatedBy = e.CreatedBy, 
        CreatedOn = e.CreatedOn, 
        ModifiedBy = e.ModifiedBy, 
        ModifiedOn = e.ModifiedOn, 
        RSVPs = from r in e.RSVP 
          select new BizObjects.RSVP 
          { 
           RSVPId = RSVPId, 
           // etc. 
          } 
       }; 
相关问题