2013-05-28 2 views
0

Я массив строк данных инициализируется так:Получить индекс первого «элемента» в DataRow массиве

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

В таблице данных, что оно происходит от от запроса SQL, который возвращает (между прочим) имя, дата, адрес, код заказа (например, 00000004) и тип заказа (ПОЧТА или ЗАКАЗ). Таблица данных сортируется таким образом, что ее отсортировано по коду заказа, имени, дате, затем типу заказа

В цикле for, когда я перебираю строки, есть способ получить индекс строки первого появления определенного адреса? Потому что может быть несколько MAIL и поручения от адреса, и они могут быть в любом порядке (и названия могут быть разными)

например:

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, вы не» t обязательно необходимо использовать '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); 

} 
Смежные вопросы