【发布时间】:2022-10-05 03:46:57
【问题描述】:
我有一个DataTable,它是从 SQL 数据库中填充的。值作为对象类型返回(由于某种原因,Calculate 函数也返回对象),所以我需要将它们转换为正确的类型。它使代码变得如此复杂。
像这样:
double value;
foreach (DataRow row in sampleDataTable.Rows)
{
value += (double)Global.Calculate(Convert.ToDouble(Global.dbNullCheck(row["value1"], 0)) / Convert.ToDouble(row["value2"]), 2);
}
我可以将上面的代码写成:
double sum;
double value1;
double value2;
foreach (DataRow row in sampleDataTable.Rows)
{
value1 = Convert.ToDouble(Global.dbNullCheck(row["value1"], 0);
value2 = Convert.ToDouble(row["value2"]);
sum += (double)Global.Calculate(value1 / value2, 2);
}
但是,当然,仍然不清楚,我做错了什么。如果它们是DBNull,我需要检查所有值,然后我需要转换它们。有什么想法可以改进这种类型的代码吗?它在我的代码周围:)
有没有处理 SQL 数据的好方法?
【问题讨论】:
-
这与 <sql> 语言无关。也许您应该添加 <sql-server> 标记?
-
使用:foreach(sampleDataTable.AsEnumerable().Where(x => x.Field<object>("value1") == DBNull.Value) 中的 DataRow 行)
-
问题可能始于一开始没有使用强类型的东西。您现在在弱类型事物的道路上走得很远,现在很难想出一个通用的简单解决方案。大多数 ORM 或任何类型的映射器都可以在一个中心位置进行处理,但之后您将不再需要摆弄这些细节。
-
@Ralf 弱类型是指很多带有对象的返回类型? C#不是已经是强类型语言了吗?我之前没用过ORM,是不是这种情况的解决方案?
-
你的代码很好。你所有的变量都有类型。