我正在执行一个查询,在该查询中,我将查询投影到使用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,因为我需要父表中每一行的新列表。
这里有什么建议吗?
答案 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
);