Как получить значение второго столбца, который является тем же именем с другим столбцом в dataTable by C#

У меня есть dataTable получить от вызова хранимой процедуры в SQL Server, он имеет 2 столбца с тем же именем: NAME_PROJECT

Пример: результат этого запроса:

SELECT
    NAME_PROJECT,
    DATE,
    ...
    NAME_PROJECT,
    ...
FROM
    TABLE_A

Это мой код в C#, он всегда получает значение первого столбца:

dataTable.Rows[i].Field<string>("NAME_PROJECT")

По какой-то причине я не могу изменить ключ «NAME_PROJECT» из SQL, чтобы избежать одноименного столбца.

Как получить значение второго столбца NAME_PROJECT в этой проблеме?

Спасибо!

3 ответа

  1. Field перегружен, чтобы принять индекс столбца, в этом случае можно использовать передать индекс.

    dataTable.Rows[i].Field<string>(2);
    

    Обновить:

    Так как вы хотите взять второй столбец, когда есть повторяющиеся имена столбцов, я бы предложил сделать это.

    var column = dataTable.Columns
                          .OfType<DataColumn>()
                          .LastOrDefault(x=> x.ColumnName == "columnname");
    
    if(column != null)
    {
         dataTable.Rows[i].Field<string>(column); 
    }
    
  2. Можно создать псевдоним одного из повторяющихся имен столбцов в запросе, чтобы результирующий набор, возвращаемый хранимой процедурой, не имел проблемы с повторяющимся именем столбца

  3. Одним из решений является использование индекса для выбора нужного столбца.

    string Second_Name_Porject = dataTable.Rows[i].ItemArray[2];