【问题标题】:Type of conditional expression cannot be determined无法确定条件表达式的类型
【发布时间】:2017-05-30 08:13:21
【问题描述】:

我正在尝试将值从数据集保存到列表这是我的代码

GetPostWRTPager_Class = ds.Tables[0]
  .AsEnumerable()
  .Select(r => new GetPostWRTPager() {
     IsApproved = r["IsApproved"] == DBNull.Value 
       ? DBNull.Value 
       : Convert.ToInt32(r["IsApproved"]),
     ApprovedBy = r["ApprovedBy"],
     ApprovedOn = Convert.ToDateTime(r["ApprovedOn"]), })
  .ToList();

它总是给我下面定义的错误

无法确定条件表达式的类型,因为存在 'System.DBNull' 和 'int' 之间没有隐式转换

我的代码有什么问题

【问题讨论】:

  • is赞成是int值吗?还是位值?
  • IsApprove 是 int 值 1) 批准 2) 不批准 3) 待定
  • 您的GetPostWRTPager.IsApproved 可以为空吗?
  • @GeomanYabes 是的

标签: c# int


【解决方案1】:

是的,DBNullint 之间没有隐式转换。但是你可以使用支持可空类型的Field扩展方法(比使用System.Object更好):

IsApproved = r.Field<int?>("IsApproved"),

如果您无法更改该属性以使其成为int?,则必须将int 转换为object

IsApproved = r.IsNull("IsApproved") ? DBNull.Value : (object)r.Field<int>("IsApproved"),

如果你想要一个 int 值和 0 以防它是 NULL

IsApproved = r.Field<int?>("IsApproved").GetValueOrDefault(),

如果IsApproved 实际上是bool 属性(顾名思义)并且只有1 表示true

IsApproved = r.Field<int?>("IsApproved") == 1,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2018-03-14
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多