我正在尝试将数据集中的值保存到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'
之间没有隐式转换
我的代码有什么问题
答案 0 :(得分:2)
是的,DBNull
和int
之间没有隐式转换。但您可以使用支持可空类型的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,