J'ai besoin de créer un filtre dynamique, j'ai créé le code suivant:
Main:
la sortie de cette ligne est la suivante:
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);
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
jusqu'à présent tout va bien
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; }
Quand j'ai lancé ce code
j'ai obtenu l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part _BindingSource.DataSource = context.MyEntity.Where(query).ToList();
Est-ce que quelqu'un d'autre a connu cette erreur et sait comment la résoudre?Le paramètre « entity » n'était pas lié dans l'expression de requête LINQ to Entities spécifiée.
Merci
Partager