当列具有空值[重复]时,数据集到列表弹出失败

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();

以上是关于当列具有空值[重复]时,数据集到列表弹出失败的主要内容,如果未能解决你的问题,请参考以下文章

当列数据类型为列表时如何过滤熊猫数据框

仅当列存在时才适用于数据框列表

当列名为“DATE”(列名)时查询失败

Scala(Spark)-当列是列表时如何分组

PySpark:当列是列表时,将列添加到 DataFrame

当列中的项目是列表时,列上的合并 Pandas DataFrame 的 TypeError