【问题标题】:Get 'Column Title' from EnumerableRowCollection<T> LINQ Results从 EnumerableRowCollection<T> LINQ 结果中获取“列标题”
【发布时间】:2011-10-27 10:42:34
【问题描述】:

希望这相对简单。在我对DataTable 执行LINQ 查询后,我想将结果放入另一个我计划动态创建的DataTable 中。我需要的是在LINQ 查询结果集合中找到column titles 的名称。

编辑:LINQ 查询

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”。

真的希望这是有道理的!

【问题讨论】:

  • 您只需要从数据表中返回一个列名列表吗?
  • 我的 LINQ 查询结果中没有。
  • 您的 LINQ 查询是什么?请显示

标签: c# .net linq datatable ienumerable


【解决方案1】:

由于查询结果集是一组匿名类型项,因此您不能在 DataTable 和 DataColumn/Rows 方面做任何事情...但是您可以使用反射检索名称,因为每列都将表示为匿名类型的公共属性:

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

这将返回:

[0]: "ID"
[1]: "a"
[2]: "b"

【讨论】:

  • 别忘了加if (results != null and results.Count() &gt; 0)
【解决方案2】:

作为一个快速的敲门(可能不是最好的,但这是匆忙完成的 - 非常匆忙!!):

    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

希望这是有道理的

【讨论】:

  • 这不只是返回 DataTable 的列标题,而不是查询“列标题”吗?
  • CopyToDataTable() 方法确实有效。我似乎记得它与它是可枚举的(或者不是,或者什么!)
  • 刚刚查看了您的查询,因为它是返回的匿名类型。 @sll 在下方提供了正确答案!
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
相关资源
最近更新 更多