【问题标题】:List<model> to allow DBNullList<model> 允许 DBNull
【发布时间】:2018-08-02 09:18:52
【问题描述】:

我有以下代码:

public static List<ResponseSupplier> Feza_ReturnSuppliers(string country, string locale, string rtype, string scat, string sscat, string bill, int? comp, double? inc, int? loi, bool? fc, int? hf)
    {
        string query = string.Format(Queries[SqlQueries.returnquery], country, locale, rtype, scat, sscat, bill, comp, inc, loi, fc, hf);
        IList<ExpandoObject> suppliersRaw = DatabaseHelper.MultiResponseComplex(conn, query,
            new List<string>
            {   "SupID",
                "SupName",
                "Tlabel",
                "Tcode",
                "dcstatic",
                "dcur",
                "dse",
                "ltz",
                "st",
                "isamp",
                "minf",
                "sf",
                "cpt",
                "Scoring",
                "TrustCoefficient",
                "ApiIntegrated",
                "fapi"
            });

        return suppliersRaw.Select(e => new ResponseSupplier

        {
            SupID = (((dynamic)e).SupID.ToString()) as string,
            SupName = (((dynamic)e).SupName) as string,
            Tlabel = (((dynamic)e).TierLabel) as string,
            Tcode = (int?)(((dynamic)e).Tcode),
            dcstatic = (double?)(((dynamic)e).dcstatic),
            dcur = (((dynamic)e).dcur) as string,
            dse = (((dynamic)e).dse) as string,
            ltz = (((dynamic)e).ltz) as string,
            st = (((dynamic)e).st) as string,
            isamp = (bool?)(((dynamic)e).isamp),
            minf = (double?)(((dynamic)e).minf),
            sf = (double?)(((dynamic)e).sf),
            cpt = (string)(((dynamic)e).cpt),
            Scoring = (double?)(((dynamic)e).Scoring),
            TrustCoefficient = (double?)(((dynamic)e).TrustCoefficient),
            ApiIntegrated = (bool?)(((dynamic)e).ApiIntegrated),
            fapi = (bool?)(((dynamic)e).fapi)

    }).ToList();

我收到以下错误:'Cannot convert type 'System.DBNull' to 'double?'' 那是因为在数据库中我可以有 Null 为:'TrustCoefficient' 和'Scoring'。 我怎样才能克服错误,请注意,当为空时,我不想得到像“0”这样的值。那是因为我需要将此列表的结果与另一个列表的结果进行比较(并且该列表对提到的参数显示为空)。 有没有办法转换或解析或做一些事情

            Scoring = (double?)(((dynamic)e).Scoring),
            TrustCoefficient = (double?)(((dynamic)e).TrustCoefficient),

允许 DBNull 并在结果中显示 Scoring = Null ?

【问题讨论】:

  • 还可以考虑使用像 PetaPoco 或 Dapper 这样的 ORM 来自动为您执行此操作。
  • 看起来真正的问题是MultiResponseComplex,不管它做什么?为什么不使用匿名类型或像 Dapper 这样的 microORM,这样您不需要 需要所有这些强制转换和转换?

标签: c# list linq


【解决方案1】:

试试这个:

Scoring = ((dynamic)e).Scoring is DBNull ? null : (double)(((dynamic)e).Scoring),
TrustCoefficient = (dynamic)e).TrustCoefficient is DBNull ? null : (double)(((dynamic)e).TrustCoefficient),

并且您需要检查每个列的值是否为 DBNull

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多