0

WHERELinqKit Predicate Builder を使用して、追加のオプション条件を追加したい linq クエリがあります。ただし、追加の述語を機能させるのに苦労しています

これは私の最初のクエリです:

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 は変更されず、クエリは同じ数の行を返します。

次のように Expand 変換を行う必要があるかもしれないと思いました。

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

しかし、これは実行時エラーを引き起こします。

問題は、すでに純粋なオブジェクトではないクエリに述語を追加していることだと思いますがOrganisationProduct、適切な場所に述語を挿入する方法についてアドバイスをお願いします。

ありがとう、そしてみんな:-)

4

1 に答える 1

3

の戻り値をAnd述語に割り当てる必要があります。

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

補足:この述語ビルダーは、なくても機能Expand/AsExpandableしますが、構文は同じです。

于 2015-03-10T17:53:17.103 に答える