在另一个IQueryable中使用IQueryable

时间:2017-04-04 08:05:20

标签: c# linq linq-to-entities iqueryable

我有一个扩展方法,它返回一个IQueryable,以获取公司产品,我只想在IQueryable中使用它作为子查询,

public static class DBEntitiesCompanyExtensions {
   public static IQueryable<Product> GetCompanyProducts(this DBEntities db, int companyId)
   {
      return db.Products.Where(m => m.CompanyId == companyId);
   }
}

这就是我所说的,

using(var db = new DBEntities()) {
   var query = db.Companies.Select(m => new {
                CompanyName = m.Name,
                NumberOfProducts = db.GetCompanyProducts(m.CompanyId).Count()
   });    
}

我预计它会起作用,因为我的扩展方法返回一个IQueryable,所以它可以在IQueryable中使用,我错了吗?

这就是我得到的,是否有可能使它有效?

  

System.NotSupportedException:LINQ to Entities无法识别   方法&#39; System.Linq.IQueryable`1 [WebProject.Models.Company]   GetCompanyProducts(WebProject.Models.DBEntities,Int32)&#39;   方法,并且此方法无法转换为商店表达式。

1 个答案:

答案 0 :(得分:1)

$.get内的问题不是IQueryable,因为你可以不像你那样包含子查询。

在您的示例中,整个IQueryable表示为表达式树。在那个表达式树中有类似的东西:

Select

现在EF应该以某种方式将其转换为SQL SELECT语句。它无法做到这一点,因为它无法“查看”CALL method DBEntitiesCompanyExtensions.GetCompanyProducts 方法,看看那里发生了什么。它也不能执行这种方法并对其结果做任何事情。它返回GetCompanyProducts的事实没有帮助,也没有关系。

相关问题