J'ai besoin de créer un filtre dynamique, j'ai créé le code suivant:

Main:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
dictionary["id"] = new List<string> {"223" };
dictionary["name"] = new List<string> { "HERO" };
var query = MyCollectionToLinq<MyEntity>(dictionary);
la sortie de cette ligne est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
entity => (((1 == 1) And (entity.id_DEVISE == 223)) And (entity.LIB_name== "HERO"))

et c'est ce que je voulais

fonction MyCollectionToLinq
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static Expression<Func<T, bool>> MyCollectionToLinq<T>(Dictionary<string, List<string>> dictionary)
        {
 
            Expression left = Expression.Constant(1, typeof(int));
            Expression right = Expression.Constant(1, typeof(int));
            Expression ex = PredicateBuilder.True<T>();
             ex= Expression.Equal(left, right);
             Expression<Func<T, bool>> Myex = null;
 
            foreach (var data in dictionary)
            {
                var cle = data.Key;
                var valeur = data.Value;
                int i = 0;
                foreach (var val in valeur)
                {
                    i++;
                    if (i == 1)
                    {
                        left = ex;
                        right = GetLambdaExpression<T>(cle, val);
                        ex = Expression.And(left, right);
                    }
                    else
                    {
                        left = ex;
                        right = GetLambdaExpression<T>(cle, val);
                        ex = Expression.Or(left, right);
                    }
                }
               var Ex= Expression.Lambda<Func<T, bool>>(ex, new ParameterExpression[] { Expression.Parameter(typeof(T), "entity") });
               Myex = Ex;
 
            }
            return Myex;
        }
jusqu'à présent tout va bien
Quand j'ai lancé ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
_BindingSource.DataSource = context.MyEntity.Where(query).ToList();
j'ai obtenu l'erreur suivante:
Le paramètre « entity » n'était pas lié dans l'expression de requête LINQ to Entities spécifiée.
Est-ce que quelqu'un d'autre a connu cette erreur et sait comment la résoudre?
Merci