Ich bin Ausdrücke für Entity Framework zur Laufzeit erstellen und ich habe alle Probleme gelöst, außer eine Eigenschaft aus einem Kind ICollection auswählen.Expression.Call Keine Methode 'Select' existiert auf Typ System.Collections.Generic.ICollection
Es ist schwierig, meinen ganzen Rahmen zu veröffentlichen, aber hier ist, was ich versucht habe.
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
Diese Leitung führt den Fehler.
Expression.Call(property, "Select", null,(MemberExpression)innerProperty);
Dies ist der Fehler.
Keine Methode 'Auswählen' existiert auf Typ ‚System.Collections.Generic.ICollection`1 [ApplicationUserRole]
Dies ist, was ich versuche, dynamisch zu erzeugen.
await context.Users.Where(c => c.Roles
.Select(x => x.ApplicationRole.Name)
.Contains("admin"))
.ToListAsync();
Ich würde jemanden schätzen, der helfen könnte.
Select ist eine Erweiterungsmethode in System.Linq Namespace, so dass Sie es nicht direkt am Objekt mit Reflexion nennen. Siehe: http://stackoverflow.com/questions/1452261/how-do-i-invoke-an-extension-method-using-reflection –