投影包含列表的新项目

时间:2012-04-10 21:21:59

标签: c# linq linq-to-entities

我正在执行一个查询,在该查询中,我将查询投影到使用Lists的业务对象中。问题是Linq to entities抱怨“在LINQ to Entities中只支持无参数构造函数和初始值设定项。”

我一直把头发拉过来。我的查询看起来像这样:

var q = from d in db.Items select new BusinessObject 
  {
      MyList = new List<MyObject>(d.Select(x => new MyObject {// set fields})
  }

我无法使用初始化程序,因为它似乎只接受单个项目,而不是它们的集合。我不能做.ToList(),因为EF然后抱怨它不知道MyObject的列表是什么(显然,它试图将它转换为SQL)。

我不能在查询之外创建List,因为我需要父表中每一行的新列表。

这里有什么建议吗?

1 个答案:

答案 0 :(得分:0)

查询对我来说很奇怪 - 什么是db?它应该是您的上下文或您的上下文的IQueryable属性吗?

假设它是您的上下文,您可以尝试在查询BusinessObject集合时尝试加载items属性(这是什么集合?),然后转换为List,然后将items属性投影到in中的List -memory collection:

var q = db.BusinessObjectsContextProperty.Select(d => d.items)  //eager load the items property
   .ToList() // get it into memory
   .Select(d => new BusinessObject { MyList = d.items
      .Select(item => new MyObject { ... } ) // project the in-memory list
   );