如何从泛型函数委托中定义LINQ表达式
本文关键字:定义 LINQ 表达式 泛型 函数 | 更新日期: 2023-09-27 18:17:26
假设我有一个方法,其输入参数名为collectionSelector
,类型为Func<TEntity, ICollection<TCollection>>
。
我想使用这个输入参数来加载EF实体,通过在DbContext
的实例上使用这个方法:
context.Entry(entity).Collection(collectionExpression).Load()
Collection方法接受Expression<Func<TEntity, ICollection<TElement>>>
类型的参数
我已经搜索了周围,但不能弄清楚如何从一个Func实例初始化一个表达式实例。有人知道吗?提前感谢!
如果您将方法定义为接受表达式:
void Process(Expression<Func<TEntity,ICollection<TCollection>>> collectionSelector)
{
context.Entry(entity).Collection(collectionExpression).Load()
}
现在你可以通过lambda来调用它:
Process(x=>x.GenerateCollection());
c#编译器会帮你把lambda转换成表达式
我已经搜索了周围,但不能弄清楚如何从一个Func实例初始化一个表达式实例。
你不能。Func
是一个指向编译方法的委托,没有办法从中获得表达式树(好吧,也许是可能的,但肯定不容易,因为您需要反编译该方法)。
根据上下文,可以将lambda表达式编译为匿名方法或表达式树。方法和表达式之间没有转换