Получить индекс строки в datatable из определенного столбца - программирование
Подтвердить что ты не робот

Получить индекс строки в datatable из определенного столбца

| 1 | 2 | 3 |
+------------+
| A | B | C |
| D | E | F | 
| G | H | I |

System.Data.DataTable dt = new DataTable();

dt.Columns.Add("1");
dt.Columns.Add("2");
dt.Columns.Add("3");
dt.Rows.Add(new object[] { "A", "B", "C" });
dt.Rows.Add(new object[] { "D", "E", "F" });
dt.Rows.Add(new object[] { "G", "H", "I" });

int? index = null;

var rows = new System.Data.DataView(dt).ToTable(false, new[] {"1"}).Rows;

for (var i = 0; i < rows.Count; i++)
{
    if (rows[i].ItemArray.FirstOrDefault() as string == "A")
        index = i;
}

Есть ли способ упростить этот код для получения индекса определенной строки с предоставленным столбцом? В этом случае индекс будет 0, так как я повторяюсь через первый столбец, пока не нахожу "A". Похоже, для этого должно быть решение linq, но я не могу понять.

4b9b3361

Ответ 1

Если вы используете метод DataTableExtensions.AsEnumerable(), вы сможете запросить свой DataTable с помощью LINQ. Затем вы можете использовать List<T>.FindIndex для определения индекса данного предиката:

int? index = new System.Data.DataView(dt).ToTable(false, new[] { "1" })
                .AsEnumerable()
                .Select(row => row.Field<string>("1")) // ie. project the col(s) needed
                .ToList()
                .FindIndex(col => col == "G"); // returns 2

Ответ 2

var index = from row in dt.AsEnumerable()
            let r = row.Field<string>("1")
            where r == "A"
            select dt.Rows.IndexOf(row);

Ответ 3

Вы должны использовать метод DataTable.Select:

DataRow[] foundRows;
string filter = "1 == A";
foundRows = dt.Select(filter);

foreach (DataRow dr in foundRows)
{
    Console.WriteLine("Index is " + dr.Table.Rows.IndexOf(dr));
}

Ответ 4

Вы можете попробовать установить столбец идентификатора. Тем не менее, я не знаю ваше приложение, поэтому, пожалуйста, рассмотрите плюсы и минусы добавления столбца идентификации в свой файл данных. Вот ссылка, чтобы вы начали - как добавить столбец идентификации

Надеюсь, это поможет.

Ответ 5

Используйте linq-операцию, но для этого ваша целевая структура должна быть 4.5. Импорт system.Data.DataExtensions и применить запрос linq поможет вам.