Bonjour,
J'ai cette méthode qui utilise une lambda avec juste un Expression.Equal, et qui marche très bien:
mon souci c'est que j'ai besoin de surcharger cette méthode pour que l'expression lambda soit une 'Expression.And' au lieu d'une simple Expression.Equal.
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 public T GetByID(Guid a_id) { var itemParameter = Expression.Parameter(typeof(T), "item"); var whereExpression = Expression.Lambda<Func<T, bool>> ( Expression.Equal( Expression.Property( itemParameter, PrimaryKeyName ), Expression.Constant(a_id) ), new ParameterExpression[] { itemParameter } ); return _context.GetTable<T>().Where(whereExpression).Single(); }
Voici le code:
j'ai une erreur à l'appel du constructeur Expression.Lambda<Func<T, bool>> :
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 public T GetByIDs(Guid[] a_ids) { var itemParameter1 = Expression.Parameter(typeof(T), "item"); var itemParameter2 = Expression.Parameter(typeof(T), "item2"); var equals1 = Expression.Equal( Expression.Property( itemParameter1, PrimaryKeyNames[0] ), Expression.Constant(a_ids[0]) ); var equals2 = Expression.Equal( Expression.Property( itemParameter2, PrimaryKeyNames[1] ), Expression.Constant(a_ids[1]) ); var andexpression = Expression.And(equals1, equals2); var parameters = new ParameterExpression[] { itemParameter1, itemParameter2 }; var whereExpression = Expression.Lambda<Func<T, bool>> //BUG ICI (andexpression, parameters); return _context.GetTable<T>().Where(whereExpression).Single(); }
"Incorrect number of parameters supplied for lambda declaration".
La création des deux expressions "equals" (equals1 ,equals2) ainsi que "add"(andexpression ) se passent bien, et on l'air de contenir les données qu'il faut quand je les regarde en debug.
l'erreur que j'ai est la suivante:
"Incorrect number of parameters supplied for lambda declaration"
Le truc c'est que c'est la seule erreur que .NET retourne dans le cas d'une erreur sur la création d'une lambda(il me semble), donc on ne peut pas se baser sur l'intitulé
Quelqu'un à une idée?
Partager