C# PredicateBuilder Entities: The parameter 'f' was not bound in the specified LINQ to Entities query expression

前端 未结 2 728
暗喜
暗喜 2020-12-04 12:08

I needed to build a dynamic filter and I wanted to keep using entities. Because of this reason I wanted to use the PredicateBuilder from albahari.

I created the foll

2条回答
  •  [愿得一人]
    2020-12-04 12:29

    I got this error and Mant101's explanation got me the answer, but you might be looking for a simpler example that causes the problem:

    // This predicate is the 1st predicate builder
    var predicate = PredicateBuilder.True();
    
    // and I am adding more predicates to it (all no problem here)
    predicate = predicate.And(c => c.ColumnA == 1);
    predicate = predicate.And(c => c.ColumnB > 32);
    predicate = predicate.And(c => c.ColumnC == 73);
    
    // Now I want to add another "AND" predicate which actually comprises 
    // of a whole list of sub-"OR" predicates
    if(keywords.Length > 0)
    {
        // NOTICE: Here I am starting off a brand new 2nd predicate builder....
        // (I'm not "AND"ing it to the existing one (yet))
        var subpredicate = PredicateBuilder.False();
    
        foreach(string s in keywords)
        {
            string t = s;  // s is part of enumerable so need to make a copy of it
            subpredicate = subpredicate.Or(c => c.Name.Contains(t));
        }
    
        // This is the "gotcha" bit... ANDing the independent
        // sub-predicate to the 1st one....
    
        // If done like this, you will FAIL!
    //  predicate = predicate.And(subpredicate); // FAIL at runtime!
    
        // To correct it, you must do this...
        predicate = predicate.And(subpredicate.Expand());  // OK at runtime!
    }
    

    Hope this helps! :-)

提交回复
热议问题