我正在尝试使用 linq 谓词生成过滤器代码。当我将谓词与对象一起使用时 != null:
public static Expression<Func<ContactPermitsSearch, bool>> PermitNumberNotNull()
{
Expression<Func<ContactPermitsSearch, bool>> predicate = contactPermit => contactPermit.PermitNumber != null;
return predicate;
}
调用者:
public static IQueryable<ContactPermitsSearch> FilterByNameMailingPermit(this IQueryable<ContactPermitsSearch> queryable, string search, bool filterOn)
{
var predicate = PredicateBuilder.True<ContactPermitsSearch>();
predicate = predicate.And(PermitNumberNotNull());
var filtered = queryable.AsExpandable().Where(predicate);
return filtered;
}
生成的 SQL 语句不包含 PermitNumberNotNull 谓词语句。
关于解决这个问题的想法?
最佳答案
代码没有明显的错误。我敢肯定,如果您在将 PermitNumberNotNull()
与 permitNumberNotNull()
合并后在调试器中检查 predicate
,您会发现 not null 谓词是表达式树的一部分。
唯一合理的假设是 EF 知道 contactPermit.PermitNumber
不能为空,因为它是必需 属性。因此,它只是忽略谓词。
关于C# Linq 谓词生成从列表中删除所有空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272262/