C# 投影包含列表的新项

C# 投影包含列表的新项,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我正在执行一个查询,其中我将查询投影到使用列表的业务对象中。问题是LINQtoEntities抱怨“在LINQtoEntities中只支持无参数构造函数和初始值设定项。” 我一直在为这件事发愁。我的查询如下所示: var q = from d in db.Items select new BusinessObject { MyList = new List<MyObject>(d.Select(x => new MyObject {// set fields}

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

我一直在为这件事发愁。我的查询如下所示:

var q = from d in db.Items select new BusinessObject 
  {
      MyList = new List<MyObject>(d.Select(x => new MyObject {// set fields})
  }
var q=来自数据库中的d。项目选择新的BusinessObject
{
MyList=新列表(d.Select(x=>newmyobject{//set fields})
}
我不能使用初始值设定项,因为它似乎只接受单个项,而不接受它们的集合。我不能使用.ToList(),因为EF随后抱怨它不知道MyObject的列表是什么(显然,它正在尝试将其转换为SQL)

我无法在查询之外创建列表,因为我需要为父表中的每一行创建一个新列表


这里有什么建议吗?

我觉得这个查询很奇怪-什么是db?它应该是您的上下文还是上下文的IQueryable属性

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

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
   ); 

@HenkHolterman-定义是不相关的,除了MyList是一个列表这一事实(从代码中可以明显看出)。MyObject中的字段是不相关的,与问题无关。对不起,在查询的第一部分输入错误,应该是db.Items(是的,它是一个DbSet)。这大大简化了一个复杂得多的查询。在顶部阶段将其拉入内存将导致数十万条记录被带进内存。如果在正确的位置执行ToList,则不会导致超出需要的行数被带进内存,是吗。。?