I upgraded to from EFCore 3 to EFCore 6 and I get this error must be reducible node
. I use Postgresql has my database.
The error come from the Compile
statement:
private IQueryable<T> ApplyFilter(IQueryable<T> query, string rawFilter, ODataQueryOptionParser oDataQueryOptionParser, ODataQueryContext oDataQueryContext)
{
FilterQueryOption filter = new FilterQueryOption(rawFilter, oDataQueryContext, oDataQueryOptionParser);
var queryable = filter.ApplyTo(query, new ODataQuerySettings());
var visitor = new CaseInsensitiveAccentSensitiveExpressionVisitor();
var queryExpression = queryable.Expression;
var visitExpression = visitor.Visit(queryExpression);
queryable = (IQueryable)Expression.Lambda(visitExpression).Compile().DynamicInvoke();
return (IQueryable<T>)queryable;
}
At first I thought it was in my CaseInsensitiveAccentSensitiveExpressionVisitor
class but, the thing is, even if my CaseInsensitiveAccentSensitiveExpressionVisitor
only call base functions whitout any more codre, I still get this error.
public class CaseInsensitiveAccentSensitiveExpressionVisitor : ExpressionVisitor
{
protected override Expression VisitMethodCall(MethodCallExpression node)
{
return base.VisitMethodCall(node);
}
protected override Expression VisitMember(MemberExpression node)
{
return base.VisitMember(node);
}
}
The CaseInsensitiveAccentSensitiveExpressionVisitor
is suppose to add ToLower
to string fields so filter are case Insensitive.
Use query.Provider.CreateQuery<>(..)
for generating IQueryable<>
with corrected expression.
private IQueryable<T> ApplyFilter(IQueryable<T> query, string rawFilter, ODataQueryOptionParser oDataQueryOptionParser, ODataQueryContext oDataQueryContext)
{
FilterQueryOption filter = new FilterQueryOption(rawFilter, oDataQueryContext, oDataQueryOptionParser);
var queryable = filter.ApplyTo(query, new ODataQuerySettings());
var visitor = new CaseInsensitiveAccentSensitiveExpressionVisitor();
var queryExpression = queryable.Expression;
var visitExpression = visitor.Visit(queryExpression);
return query.Provider.CreateQuery<T>(visitExpression);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.