我從 EFCore 3 升級到 EFCore 6 并收到此錯誤must be reducible node。我使用 Postgresql 有我的資料庫。
錯誤來自Compile宣告:
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;
}
起初我以為這是在我的CaseInsensitiveAccentSensitiveExpressionVisitor課堂上,但問題是,即使我CaseInsensitiveAccentSensitiveExpressionVisitor只呼叫基本函式而沒有更多的代碼,我仍然會收到這個錯誤。
public class CaseInsensitiveAccentSensitiveExpressionVisitor : ExpressionVisitor
{
protected override Expression VisitMethodCall(MethodCallExpression node)
{
return base.VisitMethodCall(node);
}
protected override Expression VisitMember(MemberExpression node)
{
return base.VisitMember(node);
}
}
CaseInsensitiveAccentSensitiveExpressionVisitor假設添加到字串欄位,因此ToLower過濾器不區分大小寫。
uj5u.com熱心網友回復:
用于query.Provider.CreateQuery<>(..)生成IQueryable<>校正運算式。
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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494217.html
上一篇:使用LINQ從檔案中選擇未知值
