C# lambda到表达式树

C# lambda到表达式树,c#,expression-trees,C#,Expression Trees,如何将以下lambda转换为表达式树 source.Join(lookup, s => s.Id, l => l.Id, (s,l) => l) 我想我已经涵盖了所有内容,除了结果选择器s,l=>l 这是我的密码。。谢谢 public static IQueryable<TLookup> GetLookupSource<T, TLookup, TKey>(this IQueryable<T> source, IQueryable<TL

如何将以下lambda转换为表达式树

source.Join(lookup, s => s.Id, l => l.Id, (s,l) => l)
我想我已经涵盖了所有内容,除了结果选择器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;
}

我认为这应该做到:

var resultSelector = Expression.Lambda<Func<T, TLookup, TLookup>>(l, s, l);

我认为这应该做到:

var resultSelector = Expression.Lambda<Func<T, TLookup, TLookup>>(l, s, l);

那么,为什么不添加结果选择器呢?你有什么问题?@ban-G,请不要编辑一个包含答案的问题。这让每个人都非常困惑。该网站的目的是查看问题,然后查看下面的答案。你的行为使这个比喻无法奏效。我很困惑为什么Balazs的答案是有用的,因为它已经是问题中包含的代码了。干杯,明白了。是的,当我更正代码时,它让人困惑。感谢您恢复我的更改。那么,为什么不添加结果选择器呢?你有什么问题?@ban-G,请不要编辑一个包含答案的问题。这让每个人都非常困惑。该网站的目的是查看问题,然后查看下面的答案。你的行为使这个比喻无法奏效。我很困惑为什么Balazs的答案是有用的,因为它已经是问题中包含的代码了。干杯,明白了。是的,当我更正代码时,它让人困惑。谢谢你回复我的更改。