Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 新对象验证-要列出的数据表<;RelGeral>;_C#_Linq_Datatable - Fatal编程技术网

C# 新对象验证-要列出的数据表<;RelGeral>;

C# 新对象验证-要列出的数据表<;RelGeral>;,c#,linq,datatable,C#,Linq,Datatable,不幸的是我在这一点上被阻止了 我的DataTable上有我所有的数据,现在我需要转换到一个列表并返回,但首先我需要验证我的数据。我需要验证decimal、int等是否为null,并且我可以正确地解析它们 你们有什么建议 return (from DataRow rw in dt.Rows select new RelGeral { SR = rw["SR"].ToString(), UF = rw["UF"].ToS

不幸的是我在这一点上被阻止了

我的DataTable上有我所有的数据,现在我需要转换到一个列表并返回,但首先我需要验证我的数据。我需要验证decimal、int等是否为null,并且我可以正确地解析它们

你们有什么建议

return (from DataRow rw in dt.Rows
        select new RelGeral
        {
            SR = rw["SR"].ToString(),
            UF = rw["UF"].ToString(),
            AndamentoQnt = (int)rw["AndamentoQnt"],
            AndamentoVl = (decimal)rw["AndamentoVl"],
            BenEncQnt = (int)rw["BenEncQnt"],
            DspRemissaoQnt = (int)rw["DspRemissaoQnt"],
            DspRemissaoVl = (decimal)rw["DspRemissaoVl"],
            Estado = rw["Estado"].ToString(),
            FinalizadaQnt = (int)rw["FinalizadaQnt"],
            FinalizadaVl = (decimal)rw["FinalizadaVl"],
            RemitidosQnt = (int)rw["RemitidosQnt"],
            RemitidosVl = (decimal)rw["RemitidosVl"],
            TotalQnt = (int)rw["TotalQnt"],
            TotalVl = (decimal)rw["TotalVl"]
        }).ToList();
是的,我被“阻止”了,很简单:/


这是否可以在某种程度上得到改善?

< P>以上内容是启发性的,使我考虑了我支持的软件并进行了进一步的研究,我发现:

当值为“DBNULL”时,解决方案是可以的,但在一般情况下,实体可以是“NULL”而不是“DBNULL”,行中的表达式rw[“TotalQnt”].ToString()会引发异常

TotalQnt=int.Parse(string.IsNullOrEmpty(rw[“TotalQnt”].ToString())?“0”:rw[“TotalQnt”].ToString())

当rw[“TotalQnt”]为“null”时

对于支持“NULL”或“DBNULL”或数字字符串的更一般情况,使用插值字符串表达式可以解决问题,并将行更改为

TotalQnt=int.Parse(string.IsNullOrEmpty($“{rw[“TotalQnt”]}”)?“0”:rw[“TotalQnt”].ToString())

将此过滤进一步用于处理更一般情况下的空白:


TotalQnt=int.Parse(string.IsNullOrWhiteSpace($“{rw[“TotalQnt”]}”)?“0”:rw[“TotalQnt”].ToString(),

您的意思是“stopped”(而不是“stocked”)?如果您只是想检查您的行列是否为null,我想您可以将其与DBNull.Value进行比较,所以类似这样的三元If语句可能会起作用,而mentoqnt=(rw)[“AndamentoQnt”]==DBNull.Value)?0:(int)rw[“AndamentoQnt”];或者您需要将类的属性设置为可空,并在尝试显示它们之前对其进行检查。@Bearcat9425,是的,您是对的!谢谢!如果您希望这一面更干净,您只需使用类中的?运算符(如public int?TotalQt)将属性设置为可空,但最终您必须执行空检查在某个地方进行空值检查。在显示信息之前,您必须在gui级别执行空值检查,我个人认为我更喜欢您所拥有的信息。要么这样做,要么使数据库中的值不可空值,如果它是一个已建立的应用程序,这将非常困难。您所说的
是什么意思在某种程度上
?请注意,
rw[“FieldName”]
之后的
ToString()
方法是多余的!如果您将数据行投影到特定类,则可以通过添加必要的验证来改进此类。
  return (from DataRow rw in dt.Rows
        select new RelGeral
        {
           TotalQnt = int.Parse(string.IsNullOrEmpty(rw["TotalQnt"].ToString()) ? "0" : rw["TotalQnt"].ToString()),
           AndamentoQnt = int.Parse(string.IsNullOrEmpty(rw["AndamentoQnt"].ToString()) ? "0" : rw["AndamentoQnt"].ToString()),
           BenEncQnt = int.Parse(string.IsNullOrEmpty(rw["BenEncQnt"].ToString()) ? "0" : rw["BenEncQnt"].ToString()),
           DspRemissaoQnt = int.Parse(string.IsNullOrEmpty(rw["DspRemissaoQnt"].ToString()) ? "0" : rw["DspRemissaoQnt"].ToString()),
           FinalizadaQnt = int.Parse(string.IsNullOrEmpty(rw["FinalizadaQnt"].ToString()) ? "0" : rw["FinalizadaQnt"].ToString()),
           RemitidosQnt = int.Parse(string.IsNullOrEmpty(rw["RemitidosQnt"].ToString()) ? "0" : rw["RemitidosQnt"].ToString()),
           SR = rw["SR"].ToString(),
           UF = rw["UF"].ToString(),
           Estado = rw["Estado"].ToString(),
           AndamentoVl = decimal.Parse(string.IsNullOrEmpty(rw["AndamentoVl"].ToString()) ? "0" : rw["AndamentoVl"].ToString()),
           DspRemissaoVl = decimal.Parse(string.IsNullOrEmpty(rw["DspRemissaoVl"].ToString()) ? "0" : rw["DspRemissaoVl"].ToString()),
           FinalizadaVl = decimal.Parse(string.IsNullOrEmpty(rw["FinalizadaVl"].ToString()) ? "0" : rw["FinalizadaVl"].ToString()),
           RemitidosVl = decimal.Parse(string.IsNullOrEmpty(rw["RemitidosVl"].ToString()) ? "0" : rw["RemitidosVl"].ToString()),
           TotalVl = decimal.Parse(string.IsNullOrEmpty(rw["TotalVl"].ToString()) ? "0" : rw["TotalVl"].ToString()),
           SR_COD = rw["SR_COD"].ToString()
        }).OrderBy(c => c.SR_COD).ToList();