【发布时间】:2011-07-22 11:45:03
【问题描述】:
我有一个方法,它基于传入的参数构建一个大型 Lambda 表达式(用于 db 查询的过滤器,Entity Framework v. 1.0)。 假设我们有一个 Person、Department 和 Occupation 实体。 人可以有职业,职业属于一个部门。
代码如下:
var query = myDbContext.AsQueryable();
query = query.Persons.Where(.......) //Building some conditions
...
... //Adding conditions to the query if there are incoming params
问题出在以下片段:
//We have a Department Id as parameter, so we want to filter persons whose Occupations belong to this Department
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).Count(occ => occ.Department.Id == myFilterParameter) > 0;)
这很好用,但是当从表达式中重构 Count() 构造的谓词时,如下所示:
Expression<Func<Occupation, bool>> countExpression = occ => occ.DepartmentId == myFilterParameter;
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).Count(countExpression.Compile()) > 0);
导致
内部 .NET Framework 数据提供程序错误 1025。
你知道为什么会这样吗?
我也试过了:
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).AsQueryable().Count(countExpression.Compile()) > 0), the same picture.
任何帮助都会非常感激。
【问题讨论】:
-
用
Any(occ => occ.Department.Id == myFilterParameter)代替Count(occ => occ.Department.Id == myFilterParameter) > 0 -
试过
(occ => !occ.IsDeleted).Any(countExpression.Compile()),同样的例外:(
标签: c# linq entity-framework lambda