1
如何将下列lambda转换为表达式树?lambda表达式树
source.Join(lookup, s => s.Id, l => l.Id, (s,l) => l)
我想我已除了resultSelector(s,l)=> l之外的所有内容。
这是我的代码..谢谢!
public static IQueryable<TLookup> GetLookupSource<T, TLookup, TKey>(this IQueryable<T> source, IQueryable<TLookup> lookup{
ParameterExpression s = Expression.Parameter(source.ElementType, "s");
Expression<Func<T, TKey>> outerKeySelector = Expression.Lambda<Func<T, TKey>>(Expression.PropertyOrField(s, "Id"), s);
ParameterExpression l = Expression.Parameter(lookup.ElementType, "l");
Expression<Func<TLookup, TKey>> innerKeySelector = Expression.Lambda<Func<TLookup, TKey>>(Expression.PropertyOrField(l, "Id"), l);
Expression<Func<T, TLookup, IQueryable<TLookup>>> resultSelector = null;//<---How to compose this
MethodInfo joinMethod = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public).Where(m => m.Name == "Join" && m.GetParameters().Length == 5).First();
var genericJoinMethod = joinMethod.MakeGenericMethod(typeof(T), typeof(TLookup), typeof(TKey), typeof(IQueryable<TLookup>));
var result = genericJoinMethod.Invoke(source, new object[] { source, lookup, outerKeySelector, innerKeySelector, resultSelector });
return (IQueryable<TLookup>)result;
}
那么,你为什么不加入结果选择?你有什么问题? – svick 2012-04-06 00:03:14
@ ban-G,请不要编辑问题以包含答案。 **这对每个人来说都是非常令人困惑的。**网站的目的是查看问题,然后查看下面的答案。你的行为阻止了这个隐喻的运作。 (我非常困惑,为什么Balazs的回答很有用,因为它已经是问题中包含的代码。)干杯。 – 2012-04-06 01:59:24
明白了。是的,当我纠正代码时,它使我感到困惑。感谢您恢复我的更改。 – 2012-05-03 21:27:35