当列具有空值[重复]时,数据集到列表弹出失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当列具有空值[重复]时,数据集到列表弹出失败相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我正在尝试将数据集转换为对象列表。
这是我尝试过的:
List<FundPerformanceRecord> FundPerformanceRecordList
= ds.Tables[0].AsEnumerable()
.Select(x => new FundPerformanceRecord
{
FundCode = x.Field<string>("FUND_CODE"),
OneMonth = x.Field<decimal>("ROR1MTH"),
ThreeMonth = x.Field<decimal>("ROR3MTH")
})
.ToList();
FundPerformanceRecord类具有定义为Nullable Decimal的属性。
[DataMember]
public string FundCode;
[DataMember]
public decimal? OneMonth;
[DataMember]
public decimal? ThreeMonth;
如果数据集中的任何Cell值具有空值,则会收到以下错误消息。
System error - Cannot cast DBNull.Value to type 'System.Decimal'. Please use a nullable type.
我该如何解决这个问题?
答案
Field
方法支持可空类型,你只需要使用它们::
....
.Select(x => new FundPerformanceRecord
{
FundCode = x.Field<string>("FUND_CODE"),
OneMonth = x.Field<decimal?>("ROR1MTH"),
ThreeMonth = x.Field<decimal?>("ROR3MTH")
})
....
另一答案
您的模型具有可以为空的类型decimal?
的字段,但是当从DataTable
访问和投射时,您使用的是decimal
而不是decimal?
。
尝试使用x.Field<decimal?>
如下:
List<FundPerformanceRecord> FundPerformanceRecordList
= ds.Tables[0].AsEnumerable()
.Select(x => new FundPerformanceRecord
{
FundCode = x.Field<string>("FUND_CODE"),
OneMonth = x.Field<decimal?>("ROR1MTH"),
ThreeMonth = x.Field<decimal?>("ROR3MTH")
})
.ToList();
以上是关于当列具有空值[重复]时,数据集到列表弹出失败的主要内容,如果未能解决你的问题,请参考以下文章