6

LinqKitPredicateBuilderを使用して、Linq 式では不可能な OR 条件で述語を作成し始めています。

私が直面している問題はPredicateBuilder.True<MyEntity>()、使用する式を除いて、最初からすべての行を返し、最初から行以外を返すPredicateBuilder.False<MyEntity>()ことです! 以下のコードを見てください。

        var pre = PredicateBuilder.True<MyEntity>();
        pre.And(m => m.IsActive == true);

        using (var db = new TestEntities())
        {
            var list = db.MyEntity.AsExpandable().Where(pre).ToList();
            dataGridView1.DataSource = list;
        }

IsActive == true の行を返す必要がありますが、すべての行が返されます!

PredicateBuilder.True |のすべての可能な組み合わせを試しました。|PredicateBuilder.Falseで メソッド、それらのどれも機能しません!AndOr

4

2 に答える 2

14

extension-method は、元の述語を変更Andしません。元の述語を表す新しい述語を、指定された述語とともに返します。AND

つまり、元の述語をまたはpreに初期化したかどうかに基づいて、すべてのレコードを使用するか、まったく使用しないことになります。truefalse

試す:

    var pre = PredicateBuilder.True<MyEntity>();
    pre = pre.And(m => m.IsActive);

OR一緒に述語を計画している場合は、false最初の述語から始めることを忘れないでください。

    var pre = PredicateBuilder.False<MyEntity>();
    pre = pre.Or(m => m.IsActive);
于 2013-03-10T17:37:00.570 に答える
0

アニが言ったように pre を割り当てるのを忘れました

pre = pre.And(m => m.IsActive);
于 2019-12-04T06:34:37.450 に答える