无法确定条件表达式的类型

时间:2017-05-30 08:13:22

标签: c# int

我正在尝试将数据集中的值保存到List这里是我的代码

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'

之间没有隐式转换

我的代码有什么问题

1 个答案:

答案 0 :(得分:2)

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

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

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

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

如果您需要int值,如果它需要NULL

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

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

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