0

我正在执行一个查询,其中我将查询投影到使用列表的业务对象中。问题是 Linq to entity 抱怨“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)。

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

这里有什么建议吗?

4

1 回答 1

0

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

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

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
   ); 
于 2012-04-10T21:54:42.433 回答