【问题标题】:How to resolve casting Error in DB2 Boolean to .NET Core Boolean?如何解决将 DB2 布尔值转换为 .NET Core 布尔值的错误?
【发布时间】: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, Func3 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


【解决方案1】:

我通过简单地不使用布尔值而是整数来解决它。这并不理想,因为它需要稍后在代码中进行不同的处理,但它是这样工作的。

public class ErrorView {
    [Required] public string Key { get; set; }
    public int Error { get; set; }
}

【讨论】: