假设我有一个方法,其输入参数名为collectionSelector
,类型为Func<TEntity, ICollection<TCollection>>
。
我想使用此输入参数在DbContext
的实例上使用此方法加载EF实体:
context.Entry(entity).Collection(collectionExpression).Load()
Collection method接受Expression<Func<TEntity, ICollection<TElement>>>
我已经四处搜索,但无法弄清楚如何从Func实例初始化Expression实例。有人有想法吗?提前谢谢!
答案 0 :(得分:1)
我一直在搜索,但无法弄清楚如何从Func实例初始化Expression实例。
你做不到。 Func
是指向编译方法的委托,没有办法从中获取表达式树(好吧,也许它可能,但肯定不容易,因为你需要反编译该方法)。
根据上下文,lambda表达式可以编译为匿名方法或表达式树。方法和表达式之间没有转换......
答案 1 :(得分:1)
如果定义表达式来获取表达式,那该怎么样:
void Process(Expression<Func<TEntity,ICollection<TCollection>>> collectionSelector)
{
context.Entry(entity).Collection(collectionExpression).Load()
}
现在你可以调用它传入一个lambda:
Process(x=>x.GenerateCollection());
C#编译器会负责将lambda转换为表达式。