我有一个包含列表项的类。我想要一个linq查询来填充类,包括这个列表。这是我的疑问:
var query = from c in context.Cars
select new CarListItem()
{
ID = c.ID,
Make = c.Make,
AvailableColors = context.CarColors.Where(u => u.CarID == c.ID).ToList()
};
基本上,我想获得所有汽车的清单,包括每辆汽车的可用颜色列表。
问题是在查询中包含.ToList()会导致错误:发生错误:
LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[CarSystem.Models.CarColors] ToList[CarColors](System.Collections.Generic.IEnumerable`1[CarSystem.Models.CarColors])' method, and this method cannot be translated into a store expression.
此时,我不知道我是否只是在Linq查询中使用了错误的语法(我应该使用.ToList()以外的其他东西吗?)或者模型的架构是否错误。
答案 0 :(得分:1)
你不能。 EF尝试将ToList()
翻译为SQL并且不知道如何。
您可以投射到其他类型,然后调用ToList()
:
var query = (from c in context.Cars
select new
{
ID = c.ID,
Make = c.Make,
AvailableColors = context.CarColors.Where(u => u.CarID == c.ID)
}).ToList()
.Select(c => new CarListItem()
{
ID = c.ID,
Make = c.Make,
AvailableColors = c.AvailableColors.ToList()
});
或将CarListItem.AvailableColors
的类型更改为IEnumerable<CarColor>
:
var query = from c in context.Cars
select new CarListItem()
{
ID = c.ID,
Make = c.Make,
AvailableColors = context.CarColors.Where(u => u.CarID == c.ID)
};