从Lambda表达式中重构谓词会导致异常
本文关键字:异常 谓词 重构 Lambda 表达式 | 更新日期: 2023-09-27 18:03:14
我有一个方法,基于传入参数构建一个大型Lambda表达式(db查询过滤器,实体框架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框架数据提供程序错误1025.
你知道为什么会这样吗?
I tried also:
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).AsQueryable().Count(countExpression.Compile()) > 0), the same picture.
打字错误:
Expression<Func<Occupation, bool>> countExpression = occ => occ.DepartmentId = myFilterParameter;
应该是:
Expression<Func<Occupation, bool>> countExpression = occ => occ.DepartmentId == myFilterParameter;
移除countExpression.Compile()
上的Compile()
编辑-你试过这样的东西吗?
query.Where(per => per.Occupations
.Where(occ => !occ.IsDeleted)
.Any(countExpression));