C# 新对象验证-要列出的数据表<;RelGeral>;
不幸的是我在这一点上被阻止了 我的DataTable上有我所有的数据,现在我需要转换到一个列表并返回,但首先我需要验证我的数据。我需要验证decimal、int等是否为null,并且我可以正确地解析它们 你们有什么建议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
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();