【问题标题】:C# SqlParameter array how to conditionally set value to null using ternary operatorC#SqlParameter数组如何使用三元运算符有条件地将值设置为null
【发布时间】:2021-08-01 20:12:26
【问题描述】:

如果我的对象值之一为 null 并且如果没有将其设置为不同的变量值,我有以下代码尝试将 sql 参数设置为 null。

理想情况下,我只会让enumvalue 为空,但由于这是EnumListValues 的枚举转换,空值似乎默认为0。所以我想出的三元解决方案是解决这个问题。如果object1 不存在,我不希望我的enumvalue 变量为0。

public enum EnumListValues
{
    Disabled = 0,
    Enabled = 1
}

Enum.TryParse(object1?.Value, out EnumListValues.LightStatus enumvalue);
new SqlParameter("object1param", SqlDbType.Bit) {Value = object1 != null ? enumvalue : DBNull.Value } //enumvalue is 0 or 1

但是我得到了错误:

错误 CS8370
C# 7.3 中不提供“目标类型条件表达式”功能。请使用语言版本 9.0 或更高版本

【问题讨论】:

  • 你尝试更新项目c#版本了吗?
  • 这是针对我的问题的推荐解决方案吗?我只是想知道这是否是解决我的问题的最佳方法,或者我是否应该尝试不同的方法。
  • 你可以在这里试试拳击{Value = object1 != null ? (object)enumvalue : (object)DBNull.Value }
  • @Eldar 只需要将其中一个转换为object,然后操作员就会知道隐式转换另一个。

标签: c# enums


【解决方案1】:

最简单的答案是使用从 TryParse 返回的三元来获得您想要的。这会将枚举值变成 LightStatus?然后您可以将其输入到您的 SqlParameter 中。

var enumvalue = Enum.TryParse(object1?.Value, out EnumListValues.LightStatus tmp) 
    ? (object)tmp
    : DBNull.Value;
new SqlParameter("object1param", SqlDbType.Bit).Value = enumvalue; 
//enumvalue is a boxed 0, 1 or DBNull.Value

【讨论】:

  • 这似乎奏效了,我想我需要使用三元并分配给 enumvalue 变量以获得空值,而不是使用默认为 0 的 tmp 值。
猜你喜欢
  • 2021-12-08
  • 2017-11-09
  • 2010-09-28
  • 2023-01-16
  • 2023-03-03
相关资源
最近更新 更多