LinqKit PredicateBuilder 添加到 linq 查询

LinqKit PredicateBuilder adding to linq query

我有一个 linq 查询,我想添加一些额外的、可选的 WHERE 条件来使用 LinqKit Predicate Builder。但是,我正在努力让额外的谓词起作用

这是我的初始查询:

var query = (from OP in ctx.OrganisationProducts
             where OP.OrganisationID == orgID
             orderby OP.Product.Name, OP.Product.VersionName
             select OP).Include("Product");

如你所见,里面有JOIN。 然后,如果需要,我希望添加额外的谓词:

if(!includeDisabledP42Admin || !includeDisabledOrgAdmin)
{
    var pred = PredicateBuilder.True<OrganisationProduct>();
    if (!includeDisabledP42Admin)
        pred.And(op => op.Enabled);
    if (!includeDisabledOrgAdmin)
        pred.And(op => op.AccessLevel == "NA" || op.AccessLevel == "NU");
    query = query.Where(pred);
}

但是,生成的SQL没有变化,查询returns相同的行数。

我想我可能不得不这样进行扩展转换:

query = query.AsExpandable().Where(pred);

但这会导致运行时错误。

我认为问题在于我将谓词添加到已经 不再是 OrganisationProduct 对象的查询中,但是我想提出建议关于我如何在正确的位置插入我的谓词。

谢谢大家:-)

您必须将 And 的 return 值分配给谓词:

pred = pred.And(op => op.Enabled);

旁注:您可能喜欢 this predicate builder,它可以在没有 Expand/AsExpandable 的情况下工作,但具有相同的语法。