C# Linq 谓词生成从列表中删除所有空值

标签 c# linq predicatebuilder

我正在尝试使用 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/

相关文章:

c# - 动态 LINQ 日期查询性能

c# - MVC LINQ 测试存储库

c# - Linq Where 语句性能缓慢

c# - 具有条件 AND、OR 和 NOT 过滤器的 Linq PredicateBuilder

c# - 如何从谓词对象中删除重复项?

c# - Linq lambda 表达式中的 bool 短路评估

c# - VS : XAML-Designer Error (ArgumentException - Same Key has already been added)

vb.net - 在 VB.NET 中使用 PredicateBuilder

C# mvc - 如何从通用方法返回特定 View

c# - 如何通过 Presenter 中的界面将我的 View 按钮数据绑定(bind)到模型