获取第一个元素的索引'在DataRow数组中

本文关键字:DataRow 数组 第一个 元素 索引 获取 | 更新日期: 2023-09-27 18:15:41

我有一个初始化的数据行数组:

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray();

派生的数据表来自SQL查询,该查询返回(除其他事项外)名称、日期、地址、订单代码(例如00000004)和订单类型(MAIL或order)。数据表按订单代码、名称、日期和订单类型

排序。

在for循环中,当我通过行循环时,是否有一种方法可以获得某个地址第一次出现的行索引?因为一个地址可以有多个MAIL和ORDER,它们可以是任意顺序(名称可以不同)

,

MAIL    Name        00000073     2011-01-10 00:00:00.000    5005 Great Pond
ORDER   Name        00000073     2012-08-02 00:00:00.000    5005 Great Pond
MAIL    Name        00000073     2013-04-15 00:00:00.000    5005 Great Pond
ORDER   Name2       00000073     2012-08-10 00:00:00.000    5005 Great Pond
MAIL    Name2       00000073     2012-09-10 00:00:00.000    5005 Great Pond

所以我想要的是5005 Great Pond的第一个实例所在的索引,它是我正在做的各种其他计算的索引。

获取第一个元素的索引'在DataRow数组中

我将这样实现:

var row = dt.Rows.Cast<DataRow>().
                        Select(x => x).
                        Where(x => x.Field<string>("Column name").Equals("value")).
                        ElementAt(0);
int index = row == null ? -1 : dt.Rows.IndexOf(row);

既然已经将数据行加载到数组中,那么应该能够使用IndexOf来获取元素。请尝试以下方法。请注意,下面的代码只是一个指导,我已经写在记事本上的草图/伪代码

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray();
foreach (row in rows){
  var address = row["Address"]; // get the address
  var firstAddress = rows.FirstOrDefault(r => (string)r["Address"] == address); // get the first address using LINQ to DataSet
  var indexOfTheFirstAddress = rows.IndexOf(firstAddress);
}