私はこれを何時間もプレイしており、新しい目を使うことができます。私よりも経験豊富な人が表現木について話しています。人は曲線が急です!ラムダを表現木に変換するのに助けが必要
以下を考慮してください。これは私がこれまで持っているものである
repo = repo.Where(x => x.Accounts.FirstOrDefault().Id == AccountId);
(これは動作しますが、私はアカウントが文字列として渡される必要があります。アカウントは、アカウントのリストです)。
var parameterExp = Expression.Parameter(typeof(Boat), "x");
var propertyExp = Expression.Property(parameterExp, "Accounts");
MethodInfo method1 = typeof(Queryable).GetMethods(BindingFlags.Public | BindingFlags.Static).First(m => m.Name == "FirstOrDefault");
// This gives me a Queryable of Account FirstOrDefault
var specificMethod = method1.MakeGenericMethod(propertyExp.Type);
// right here is where I am getting stuck
var firstOrDefaultAccountExpression = // I need to get an Account so I can query against the Id ??
MethodInfo method = typeof(long).GetMethod("Equals", new[] { typeof(long) });
var someValue = Expression.Constant(AccountId, typeof(long));
var containsMethodExp = Expression.Call(firstOrDefaultAccountExpression , method, someValue);
Expression<Func<Boat, bool>> predicate = Expression.Lambda<Func<Boat, bool>>
(containsMethodExp, parameterExp);
repo = repo.Where(predicate);
このコードを通常の文字列メンバーで使用できるようにしました。私はリストを把握していないようだ。最終的に私はAccountId = longのBoatのリストを取得しようとしています
ありがとうございました!
あなたはすべてのボートの最初のアカウントについてのみ気にしますか? –
はい、実際にはFirstOrDefaultの代わりにSingeになる可能性があります。ボートには、それらに関連するアカウントが1つしかありません。アカウントはボートのオーナーです – th3monk3y