我想要计算变量中的差异存储。
示例DB:
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)
}
}发布于 2015-05-01 10:50:24
您可以使用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 )更简单地摊销O(n)。
发布于 2015-05-01 10:49:08
尝试如下:它记住前一行的值,以计算除第一行外的每一行的差和和。
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上进行排序,才能完成此工作。
发布于 2015-05-01 10:54:44
你可以试试这样的方法:
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 IDhttps://stackoverflow.com/questions/29985478
复制相似问题