我想计算变量中的差值存储。
示例数据库:
Id RS
-- --
1 10
2 25
3 33
4 44
. .
. .
我想计算1& 2,2& 3,3& 4(ID)之间的差异,我必须将总数存储到变量中。 (25-10 = 15, 33-25=8, 44-33=11
)
输出应该是34。
我坚持使用下面给出的代码。
代码:
protected void btnSubmit_Click(object sender, EventArgs e)
{
RsTableAdapters.tbl_RS_detailsTableAdapter sd;
sd = new RsTableAdapters.tbl_RS_detailsTableAdapter();
DataTable dt = new DataTable();
dt = sd.GetData();
foreach (DataRow row in dt.Rows)
{
string rsValue = (row["RS"].ToString()); // here getting first value (10)
}
}
答案 0 :(得分:2)
您可以使用linq:
var differences = from row1 in dt.Rows
join row2 in dt.Rows on (int)row1["ID"] equals (int) row2["ID"] + 1
select (int)row2["RS"] - (int)row1["RS"];
var sumofdiffs = differences.Sum();
只要“RS”和“ID”是整数,如果不是,你应该先解析它。这种方法不需要ID的排序元素,它的缺点 - 复杂度O(n ^ 2),简单性。
修改强> 如所指出的,复杂性可能甚至比O(n ^ 2)更好,如果linq能够在相等条件下使用散列,则它可以比分类数据O(n log n)的准备更简单地分摊O(n)。
答案 1 :(得分:1)
试试这个:它会记住前一行的值来计算除第一行之外的每一行的差异和总和。
int sum = 0;
int diff;
bool first = true;
int oldValue;
foreach (DataRow row in dt.Rows)
{
int value = row["RS"];
if(!first)
{
diff = value - oldValue;
sum += diff;
first = false;
}
oldValue = value;
}
您必须确保返回的数据按ID排序才能使其正常工作
答案 2 :(得分:1)
您可以尝试这样的事情:
var drs = dt.Rows.Cast<DataRow>()
int last = (int)drs.Last()["RS]
int first = (int)drs.First()["RS"]
int diff = last - first
正如其他人所说,您需要按ID对数据进行排序。
Select RS from tbl_RS_details order by ID