使用达梦EFCore 6.0执行以下查询时会产生异常
查询是作用是从MY_TABLE表中查询出所有的TEXT_FIELD字段值,并从中截取其中第一个"_"符号后的文本
myDbContext.MY_TABLE
.Select(item => item.TEXT_FIELD
.Substring(item.TEXT_FIELD.IndexOf('_') + 1))
.ToList()
会产生如下异常
System.InvalidCastException:“Unable to cast object of type 'NotTranslatedExpressionType' to type 'Microsoft.EntityFrameworkCore.Query.SqlExpressions.SqlExpression'.”
在 Microsoft.EntityFrameworkCore.Dm.Query.Internal.DmSqlTranslatingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression)
在 System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor)
在 System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
在 System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
在 System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.TranslateInternal(Expression expression)
在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.Translate(Expression expression)
在 Microsoft.EntityFrameworkCore.Query.Internal.RelationalProjectionBindingExpressionVisitor.Visit(Expression expression)
在 Microsoft.EntityFrameworkCore.Query.Internal.RelationalProjectionBindingExpressionVisitor.Translate(SelectExpression selectExpression, Expression expression)
在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateSelect(ShapedQueryExpression source, LambdaExpression selector)
在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression)
在 System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
在 System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
在 Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)
在 Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)
在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)
在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass9_0`1.<Execute>b__0()
在 Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
在 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
在 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetEnumerator()
[程序执行查询]
该异常描述为EF实现中未正确处理"不翻译SQL的语句",代码尝试将"不翻译SQL的语句"作为"SQL翻译语句"进行处理。
目前代码可以改写成来绕过这个错误翻译问题。
myDbContext.MY_TABLE
.Select(item => item.TEXT_FIELD)
.AsEnumerable()
.Select(txt => txt.Substring(txt.IndexOf('_') + 1))
.ToList()
但是对于更复杂的查询,此内部异常会导致问题难以排查。
顶!