我有一个初始化的数据行数组:
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
的第一个实例的索引来进行我正在进行的各种其他计算。
答案 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);