Получить 'Заголовок столбца' из EnumerableRowCollection <T>LINQ Результаты - PullRequest
1 голос
/ 27 октября 2011

Надеюсь, это относительно просто. После выполнения запроса LINQ на DataTable я хочу поместить результаты в другой DataTable, который планирую создать динамически. Что мне нужно, так это найти имя th column titles в коллекции LINQ Reults.

РЕДАКТИРОВАТЬ : LINQ Query

var results= from a in dt.AsEnumerable()
                    where a.Field<int>("ID") == i 
                    select new 
                    {
                       ID = a.Field<int>("ID"),
                       a = a.Field<double>("A"),
                       b = a.Field<double>("B")
                    };

Я в основном пытаюсь вернуть - "ID", "a" и "b".

Действительно надеюсь, что это имеет смысл!

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Поскольку набор результатов запроса представляет собой набор элементов анонимного типа, вы НЕ МОЖЕТЕ ничего делать в терминах DataTable и DataColumn / Rows ... Но вы можете извлекать имена, используя отражение, поскольку каждый столбец будет представлен как открытое свойство анонимного типа. :

IEnumerable<string> names = results.First()
                                   .GetType()
                                   .GetProperties()
                                   .Select(p => p.Name);

Это вернет:

[0]: "ID"
[1]: "a"
[2]: "b"
0 голосов
/ 27 октября 2011

Как быстрый сбой (вероятно, не самый лучший, но это было сделано в спешке - большая спешка !!):

    Dim _dt As New DataTable
    Dim _col1 As New DataColumn("ClientID", GetType(Integer))
    Dim _col2 As New DataColumn("ClientName", GetType(String))

    _dt.Columns.Add(_col1)
    _dt.Columns.Add(_col2)

    _dt.Rows.Add(1, "John")
    _dt.Rows.Add(2, "Shaun")

    Dim _query = From dt In _dt

    Dim _colName As New List(Of String)

    For Each _q In _query
        For Each _column In _q.Table.Columns
            _colName.Add(_column.ToString)
        Next
    Next

Или, если у вас уже есть запрос linq, преобразуйте его обратно в таблицу данных и получите столбцы:

    Dim _dt1 = _query.CopyToDataTable

    For Each _column In _dt1.Columns
        _colName.Add(_column.ToString)
    Next

Надеюсь, это имеет смысл

...