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 谓词语句。

想解决这个问题吗?

代码没有明显的错误。我敢肯定,如果您在将 predicatePermitNumberNotNull() 合并后在调试器中检查它,您会发现 not null 谓词是表达式树的一部分。

唯一合理的假设是 EF 知道 contactPermit.PermitNumber 永远不能为空,因为它是 必需的 属性。因此,它只是忽略谓词。