循环遍历 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 的 LagLead (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 以比较当前行数据和前一行数据的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历数据表

在oracle sql中比较当前行和上一行

DataRow[]

循环遍历行 QTableWidget

Oracle sql 数学计算使用当前和前一个行值

C# 关于DataRow的一个问题!!!急