0

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

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来做我正在做的各种其他计算。

4

2 回答 2

1

我会这样实现:

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);
于 2013-05-29T00:07:04.857 回答
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);

}
于 2013-05-29T00:02:46.197 回答