Как извлечь весь столбец из таблицы данных, используя его имя столбца - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть таблица данных, которая выглядит следующим образом

|id | foo | bar |
| 0 | 321 | 33  |
| 1 | 100 |  4  |
| 2 | 355 | 23  |

Я хочу получить весь столбец, используя имя столбца в качестве аргумента

Что-то вроде

GetColumn(dataTable, "foo")

Это вернулось бы

| foo | 
| 321 | 
| 100 | 
| 355 |

Есть ли что-то, что делает это?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Попробуйте следующий linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication108
{
    class Program
    {

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("foo", typeof(int));
            dt.Columns.Add("bar", typeof(int));

            dt.Rows.Add(new object[] { 0 , 321 , 33  });
            dt.Rows.Add(new object[] { 1 , 100 , 4  });
            dt.Rows.Add(new object[] { 2 , 355 , 23  });

            List<int> results = dt.AsEnumerable().Select(x => x.Field<int>("foo")).ToList();

        }
    }
}
0 голосов
/ 11 апреля 2019

Не совсем. Но вы могли бы сделать что-то вроде:

private List<string> GetColumnValues(string columnName, DataTable dataTable)
{
    var colValues = new List<string>();
    foreach (DataRow row in datatable.Rows)
    {
        var value = row[columnName];
        if (value != null)
        {
            colValues.Add((string)value);
        }
    }
    return colValues;
}

Если вы хотите что-то, что будет работать с другими примитивными типами (int, decimal, bool и т. Д.), Вы можете прочитать о C# generics и реализовать универсальный метод.

...