I ont cette méthode:Expression et paramètre
public static Expression<Func<MyEntity, bool>> MyMethod(string someId)
{
return o => o.SomeProperty.Equals(someId);
}
Ceci est passé à une autre méthode qui utilise le cadre de l'entité avec cette expression pour récupérer les éléments correspondants. Mon problème est que ça ne marche pas. Si je remplace le someId dans le cadre de l'appel Equals avec une valeur réelle cela fonctionne. Cependant, cela ne fonctionne pas si je transmets la même valeur dans cette méthode ci-dessus. Cela signifie-t-il que le paramètre someId n'est pas évalué tant que l'expression n'est pas réellement utilisée et ne contient donc pas la valeur réelle? Désolé, je suis un peu confus ici.
Merci
Mise à jour:
Certaines informations de débogage pour celui qui fonctionne où le PARAM est codé en dur
.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(\"test1\")
Certaines informations de débogage pour celui qui ne fonctionne pas où la valeur est passée dans la méthode
.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(.Constant<MyEntity+<>c__DisplayClass4>(MyEntity+<>c__DisplayClass4).someId)
Je suppose que lorsque la valeur n'est pas codée en dur, l'expression a une référence à quelque chose qui n'existe pas? Désolé, je m'embrouille avec ce qui se passe ici!
Mise à jour 2:
C'est là où il est utilisé - une méthode dans une classe référentiel:
public MyEntity Get(string someId)
{
var queryPredicate = MyEntity.MyMethod(someId);
var foundEntity = this.Query(queryPredicate);
}
Query est une méthode sur la classe de base du référentiel comme ci-dessous:
public IEnumerable<TEntity> Query(Expression<Func<TEntity, bool>> predicate)
{
if (predicate == null)
{
throw new ArgumentNullException("predicate");
}
using (var context = new TContext())
{
return context.CreateObjectSet<TEntity>().AsExpandable().Where(predicate).ToList();
}
}
Pouvez-vous montre le code où vous essayez d'utiliser ce résultat? –