我一直在玩这个小时,并且可以使用一组全新的眼睛。好的比我有更多经验的人表达树木。男人的曲线陡峭!需要帮助将lambda转换为表达式树
请考虑以下事项。 (它的工作原理,但我需要的帐户作为一个字符串传递。账户是客户列表)
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
在此先感谢!
您只关心每艘船的第一个帐户? –
是的,它可能实际上是Singe而不是FirstOrDefault。船只将只有一个相关的帐户。该帐户是船主 – th3monk3y