Je crée des expressions pour le framework d'entité lors de l'exécution et j'ai résolu tous les problèmes sauf la sélection d'une propriété d'un ICollection enfant.Expression.Call Aucune méthode 'Select' n'existe sur le type System.Collections.Generic.ICollection
Il est difficile de poster tout mon cadre mais voici ce que j'ai essayé.
var param = Expression.Parameter(typeof(TEntity), "w");
Expression.Property(entity, propertyName);
w.Roles
var param = Expression.Parameter(typeof(TChild), "z");
Expression.Property(entity, propertyName);
z.ApplicationRole.Name
Cette ligne génère l'erreur.
Expression.Call(property, "Select", null,(MemberExpression)innerProperty);
C'est l'erreur.
Aucune méthode 'Select' existe sur le type « System.Collections.Generic.ICollection`1 [ApplicationUserRole]
C'est ce que je suis en train de produire de façon dynamique.
await context.Users.Where(c => c.Roles
.Select(x => x.ApplicationRole.Name)
.Contains("admin"))
.ToListAsync();
J'apprécierais n'importe qui qui pourrait aider.
Select est une méthode d'extension dans l'espace de noms System.Linq, donc vous ne pouvez pas l'appeler directement sur l'objet de la réflexion. Voir: http://stackoverflow.com/questions/1452261/how-do-i-invoke-an-extension-method-using-reflection –