循环遍历 DataRow 以比较当前行数据和前一行数据
Posted
技术标签:
【中文标题】循环遍历 DataRow 以比较当前行数据和前一行数据【英文标题】:Looping over DataRow to compare current row data and previous row data 【发布时间】:2020-12-06 03:26:06 【问题描述】:我需要遍历 gridview 中的 DataRow,以比较当前行和上一行的值。感谢有人可以帮助解决这个问题。我是新人
我目前正在这样迭代,但我不知道如何继续:
//检查当前行 ACTIVITY = LOAD_A 和上一行 ACTIVITY = LOAD_B 是否为真,然后存储 值并进行总和计算。
foreach (DataRow sda in dt.Rows)
if (sda.Field<string>("ACTIVITY") == "LOAD_A")
【问题讨论】:
MoreLINQ 的Lag
或 Lead
(github.com/morelinq/MoreLINQ#lead) 是我建议您开始的地方。
您能否将该字段存储在foreach
之外的变量中,然后在后续迭代中将其作为“先前”值访问?
嗨 devnull,我将字段移到 foreach 之外,但遇到错误。抱歉,我是 C# 新手。
【参考方案1】:
正如 devNull 已经提到的,您可以使用一个变量来保存 foreach
循环的上一次迭代的值。
这可能看起来像这样:
DataRow previousDr = null;
foreach (DataRow sda in dt.Rows)
if (previousDr != null)
if (sda.Field<string>("ACTIVITY") == "LOAD_A" &&
previousDr.Field<string>("ACTIVITY") == "LOAD_B")
//Store value und do calculation.
previousDr = sda;
【讨论】:
嗨@Oliver,在这个问题上需要你的帮助。我有一个gridview,我只想检查列[“ACTIVITY”]的第一行和列[“ACTIVITY”]的最后一行来获取他们的日期。感谢您是否可以在此问题上提供帮助。谢谢。【参考方案2】:您可以使用 for
语句和 DataRow 的 indexer 属性来完成此操作
DataColumn column = table.Columns["ACTIVITY"];
for (int index = 1; index < table.Rows.Count; ++index)
if (table.Rows[index - 1].Field<string>(column) == "LOAD_B" && // previous row
table.Rows[index].Field<string>(column) == "LOAD_A") // current row
// do somthing
【讨论】:
嗨@Dmirtry,在这个问题上需要你的帮助。我有一个gridview,我只想检查列[“ACTIVITY”]的第一行和列[“ACTIVITY”]的最后一行来获取他们的日期。感谢您是否可以在此问题上提供帮助。谢谢。以上是关于循环遍历 DataRow 以比较当前行数据和前一行数据的主要内容,如果未能解决你的问题,请参考以下文章