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
的情况下工作,但具有相同的语法。
我有一个 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
的情况下工作,但具有相同的语法。