gpt4 book ai didi

c# - lambda 到表达式树

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:06 25 4
gpt4 key购买 nike

如何将以下 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;
}

最佳答案

我认为应该这样做:

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

关于c# - lambda 到表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com