我有一个扩展方法,它返回一个 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 无法识别
方法 'System.Linq.IQueryable`1[WebProject.Models.Company]
GetCompanyProducts(WebProject.Models.DBEntities,Int32)'
方法,并且该方法不能转换为存储表达式。
问题不是IQueryable
inside IQueryable
,因为您可以不按照您的方式包含子查询。
在你的例子中Select
表示为表达式树。在该表达式树中,有类似以下内容:
CALL method DBEntitiesCompanyExtensions.GetCompanyProducts
现在 EF 应该以某种方式将其转换为 SQL SELECT 语句。它不能这样做,因为它不能“向内看”GetCompanyProducts
方法并看看那里发生了什么。它也不能执行此方法并对其结果执行任何操作。它返回的事实IQueryable
没有帮助并且不相关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)