获取DataRow数组中第一个'element'的索引

时间:2013-05-28 21:21:25

标签: c# arrays datarow

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

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的第一个实例的索引来进行我正在进行的各种其他计算。

2 个答案:

答案 0 :(得分:0)

由于您已将数据行加载到数组中,因此您应该能够使用 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);

}

答案 1 :(得分:0)

我会这样实现:

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);