LinqKit PredicateBuilder添加到linq查询

时间:2015-03-10 17:40:37

标签: linq predicatebuilder linqkit

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

这是我的初步查询:

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保持不变,查询返回相同的行数。

我以为我可能不得不这样做:

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

但是这会导致运行时错误。

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

谢谢,所有: - )

1 个答案:

答案 0 :(得分:2)

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

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

附注:您可能希望this predicate builder无法使用Expand/AsExpandable,但语法相同。