実行時にエンティティフレームワークの式を作成していますが、子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);
これはエラーです。
ない方法 '選択' タイプ 上に存在する「System.Collections.Generic.ICollection`1 [ApplicationUserRole]
これは私が動的に生成しようとしていますものです。
await context.Users.Where(c => c.Roles
.Select(x => x.ApplicationRole.Name)
.Contains("admin"))
.ToListAsync();
私は助けてくれる人に感謝します。
選択からラムダ表現されているので、あなたは、リフレクションを持つオブジェクトの上にそれを直接呼び出すことはできません。 参照:http://stackoverflow.com/questions/1452261/how-do-i-invoke-an-extension-method-using-reflection –