var myQuery = from product in _repository.Query()
join prodLocalization in _repoProductLocalization.Query()
on product.Id equals prodLocalization.ProductId
select new { Product = product, Localization = prodLocalization };
myQuery = myQuery.Include(x => x.Product.Customer);
var prods = myQuery.ToList();
最后一行抛出:
发生了'System.InvalidOperationException'类型的异常 EntityFramework.SqlServer.dll但未在用户代码中处理
其他信息:查询的结果类型既不是 EntityType或具有实体元素类型的CollectionType。一个 只能为包含其中一个的查询指定包含路径 结果类型。
我设法找到很少甚至没有解释为什么会发生这种情况。有什么帮助吗?
答案 0 :(得分:2)
您的课程在Product
和Localization
之间是否存在物理关系?如果他们这样做,则不应使用join
。此外,您必须在选择之前调用include。
试试这个:
var myQuery = from product in _repository.Query()
.Include(x => x.Product.Customer)
.Include(x => x.Product.Localization)
select new
{
Product = product,
Localization = product.Localization
};
var prods = myQuery.ToList();
答案 1 :(得分:0)
我遇到了类似的问题。发生这种情况是因为第一个查询中返回的类型是" Anonymous",并且Include方法无法确定所需属性的正确路径来检索它(" Customer" in你的情况)。
我找到的唯一解决方法是丢弃" Include"方法并返回匿名类型对象中所需的导航属性。
试试这个:
var myQuery = from product in _repository.Query()
join prodLocalization in _repoProductLocalization.Query()
on product.Id equals prodLocalization.ProductId
select new
{
Product = product,
Customer = product.Customer,
Localization = prodLocalization
};
var prods = myQuery.ToList();
你也可以添加:
var customerProds = prods.Select(i => {
var item = new { i.Product, i.Localization };
item.Product.Customer = i.Customer;
return item;
})
.ToList();