我想利用LinqKit的AsExpandable特性来在linq查询中转换我的自定义方法。
我可以通过实现自己的表达式访问者来实现这一点,这将将我的自定义方法转换为EF提供程序可以理解的表达式。
在深入研究LinqKit源代码之后,在我看来,LinqKit并不是为了支持这样的场景而设计的,即使它在主页上这样说过(参见捕获)。
如何将自定义访问者插入LinqKit的管道?有什么想法或建议吗?
非常感谢!
里亚娜
从…

发布于 2018-06-25 14:35:47
我想他们指的是AsExpandable的超载
public static IQueryable<T> AsExpandable<T>(this IQueryable<T> query, Func<Expression, Expression> queryOptimizer)尽管该参数名为"queryOptimizer",但实际上可以传入任何Func<Expression, Expression>,并在表达式传递给查询提供程序之前立即调用该参数:
IQueryable<TElement> IQueryProvider.CreateQuery<TElement>(Expression expression)
{
var expanded = expression.Expand();
var optimized = _queryOptimizer(expanded);
return _query.InnerQuery.Provider.CreateQuery<TElement>(optimized).AsExpandable();
}默认情况下,_queryOptimizer只是一个ID函数。之所以这样命名,是因为LinqKit也附属于这个项目:https://github.com/Thorium/Linq.Expression.Optimizer。
https://stackoverflow.com/questions/50967711
复制相似问题