【问题标题】:How to compare the columns of a datatable based on the column name and value?如何根据列名和值比较数据表的列?
【发布时间】:2018-01-30 06:10:54
【问题描述】:

我有一个像下面这样的数据表,它不是固定的,它可以包含 n 列。我需要根据列名比较列值并更新其他行值

例如

dtFinYearValues

    dtColumnName | 2017AU | 2017CN | 2018AU | 2018CN | 2019CN | 2020CN
    --------------------------------------------------------------------
     Value       | -1234  | -500   | -300   | 1000   | 1000   | -500
     LatestValue | -1234  | -500   | -300   | 500    | 1000   | -500

2018CN 的最新值 --> 2017CN 值 (-500) 和 2018CN 值(1000) 之和。

对于上述数据表,我需要比较列名并相应地更新值 条件:

1) 如果值为 -ve,则使用相同的值更新 LatestValue。

2) 如果值为+ve,则检查同一国家的上一个财政年度是否存在任何-ve 值,例如(在上述数据表中,2018CN 值为+ve,但 2017CN 值为负数,因此 2017CN 和 2018CN 之和为2018CN更新-->最新值。)

我无法对列号进行硬编码,因为可以有不同的国家/地区财政年度组合,我只需将一个国家的价值与同一个国家/地区进行比较。 我如何在 vb.net 中编写代码?

【问题讨论】:

  • “我需要比较列名”。嗯,和什么比较?
  • 2018CN的值为1000,2018CN要更新latestValue的值需要检查2017CN是否存在。如果存在,我需要检查该值是否为 -ve 如果是 -ve,我需要将 2017CN 和 2018CN 的值相加,并将值更新为 2018CN 的最新值,这在上面的数据表中完成。
  • 示例都很好,但如果您希望我们建议如何在代码中实现这些规则,我们需要知道实际规则是什么。您是不是在说,实际上没有说,对于每一列,您需要将名称分解为一个四位数的数字和一个两个字母的字符串,然后检查是否存在具有相同字符串和小于 1 的数字的列?如果那是你需要做的,那么这就是你应该说你需要做的。如果您需要其他内容,请以类似的详细信息进行描述。示例出现在规则之后,而不是之前。因此,术语“作为示例”。

标签: asp.net vb.net datatable datarow datacolumn


【解决方案1】:

你能用另一种方式从数据库中取回数据吗?如果是这样,请考虑使用 SQL unpivot(也可以使用原始数据集在您的代码中完成 unpivot,但您必须手动编写代码)。这将为您提供 3 列(名称、值、最新值)。这将更容易处理。仍然可以使用您的原始数据集进行更新。

【讨论】:

  • 同意。列应为 [Year]、[Country]、[Value]、[LatestValue]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多