【发布时间】:2025-11-28 02:10:01
【问题描述】:
我需要将布尔值从 DB2 查询转换为 .NET Core 中的布尔值
我有一个查询来检查字符串是否与正则表达式匹配。
我尝试了多种类型转换:BOOLEAN、TINYINT、SMALLINT。
CASE WHEN (REGEXP_LIKE(TESTNAME.COL1, 'Test1')) THEN CAST(true AS BOOLEAN) ELSE CAST(false AS SMALLINT) END as Error
我的实体看起来像这样:
public class ErrorView {
[Required] public string Key { get; set; }
public bool Error { get; set; }
}
可以建立到数据库的连接,这不是问题。
但是,我得到以下内容
错误:System.InvalidCastException - 无法转换类型的对象 'System.Int16' 输入 'System.Boolean'
.
完全相同的代码与 MySQL 服务器完美结合(考虑到 SQL 查询中的一些调整)。查询本身在 Datagrip 中工作。
编辑 1: 我正在使用版本 1.3.0.100 中的 NuGet 包 IBM.EntityFrameworkCore。 对于开发,我在 x64 处理器上使用 Windows 10(64 位)。
编辑 2: 这就是我所说的:
ExternalDbContextFactory dbContextFactory = new ExternalDbContextFactory(applicationDbContextOptions);
var context = dbContextFactory.Create();
var sqlRuleResult = context.EntityName.FromSql(regexRule);
我在 Microsoft 方法中遇到转换错误。尝试在实体中手动投射它不起作用,因为它没有达到那个点。
堆栈跟踪:
在 Microsoft.EntityFrameworkCore.Metadata.Internal.EntityMaterializerSource.TryReadValue[TValue](ValueBuffer& valueBuffer, Int32 index, IPropertyBase 属性)
在 lambda_method(Closure , MaterializationContext )
在 Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.UnbufferedEntityShaper`1.Shape(QueryContext queryContext, ValueBuffer& valueBuffer)
在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer)
在 Microsoft.EntityFrameworkCore.Storage.Internal.NoopExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded)在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
【问题讨论】:
-
如果有帮助请查看以下链接:*.com/questions/49389561/…
-
谢谢,但是问题是DB2版本错误。我可以在 DB2 上转换为布尔值 - 通过 Datagrip 或直接在 web 视图中(我正在使用 IBM 的 Lite 版本进行开发)。它仅在我的 .NET Core 应用程序中不起作用
-
大约两周前,我在 IBM Cloud 上创建了一个新的 DB2 Lite 版本。所以我猜它是最新版本,但找不到具体数字。
-
啊,我正在使用 IBM 的 NuGet-Packages:IBM.EntityFrameworkCore 版本 1.3.0.100,我在基于 x64 的处理器上运行 64 位版本的 Windows。
-
如果在 .net 中使用 DB2Type Boolean 可能会导致运行时异常,因为 IBM.Data.DB2Types 命名空间可能尚未原生支持 Db2Type boolean。考虑在查询中仅使用 SMALLINT。
标签: c# .net .net-core db2 entity-framework-core