查询的结果类型既不是实体类型,也不是具有实体元素类型的集合类型

本文关键字:类型 实体 元素 集合 集合类 结果 查询 | 更新日期: 2023-09-27 18:33:17

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但未在用户代码中处理

其他信息:查询的结果类型既不是 实体类型也不是具有实体元素类型的集合类型。一 只能为具有以下之一的查询指定包含路径 结果类型。

我设法找到很少或没有解释为什么会发生这种情况。有什么帮助吗?

查询的结果类型既不是实体类型,也不是具有实体元素类型的集合类型

你的类在ProductLocalization之间有物理关系吗?如果他们这样做,则不应使用join。此外,您必须在选择之前调用包含。

试试这个:

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

我刚刚遇到了类似的问题。发生这种情况是因为第一个查询返回的类型是"匿名",并且 Include 方法无法确定检索它所需的属性的正确路径(在你的例子中为"客户")。

我发现的唯一解决方法是放弃"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();