2013-05-28 49 views
0

我已數據行的陣列初始化爲這樣:獲取第一「元素」的索引

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

,它是衍生自該數據表是從SQL查詢,返回(除其他事項外)姓名,日期,地址,訂單代碼(例如00000004)和訂單類型(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

如果你使用LINQ,你不」不一定必須在事後使用'ToArray','Cast ()'就足夠了。 – Matthew

回答

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

}