Я создаю выражения для структуры сущности во время выполнения, и я решил все проблемы, кроме выбора свойства из дочернего ICollection.Expression.Call Нет метода 'Select' существует в типе System.Collections.Generic.ICollection
Трудно опубликовать все мои рамки, но вот что я пробовал.
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
Эта линия бросает ошибку.
Expression.Call(property, "Select", null,(MemberExpression)innerProperty);
Это ошибка.
Ни один метод 'Select' не существует на типе «System.Collections.Generic.ICollection`1 [ApplicationUserRole]
Это то, что я пытаюсь произвести динамически.
await context.Users.Where(c => c.Roles
.Select(x => x.ApplicationRole.Name)
.Contains("admin"))
.ToListAsync();
Я буду благодарен всем, кто мог бы помочь.
Select является метод расширения в System.Linq пространстве имен, так что вы не можете вызвать его непосредственно на объекте с отражением. См. Http://stackoverflow.com/questions/1452261/how-do-invoke-an-extension-method-using-reflection –