C# Linq 谓词生成从列表中删除所有空值
C# Linq predicate generation remove all null values from list
我正在尝试使用 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 谓词语句。
想解决这个问题吗?
代码没有明显的错误。我敢肯定,如果您在将 predicate
与 PermitNumberNotNull()
合并后在调试器中检查它,您会发现 not null 谓词是表达式树的一部分。
唯一合理的假设是 EF 知道 contactPermit.PermitNumber
永远不能为空,因为它是 必需的 属性。因此,它只是忽略谓词。
我正在尝试使用 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 谓词语句。
想解决这个问题吗?
代码没有明显的错误。我敢肯定,如果您在将 predicate
与 PermitNumberNotNull()
合并后在调试器中检查它,您会发现 not null 谓词是表达式树的一部分。
唯一合理的假设是 EF 知道 contactPermit.PermitNumber
永远不能为空,因为它是 必需的 属性。因此,它只是忽略谓词。