希望这相对简单。在LINQ
上执行DataTable
查询后,我想将结果放入我计划动态创建的另一个DataTable
中。我需要的是在column titles
查询结果集合中找到LINQ
的名称。
编辑: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”。
真的希望有道理!
答案 0 :(得分:1)
由于查询结果集是一组匿名类型项,因此无法对DataTable和DataColumn / Rows执行任何操作...但您可以使用反射检索名称,因为每列都将表示为匿名类型的公共属性:
IEnumerable<string> names = results.First()
.GetType()
.GetProperties()
.Select(p => p.Name);
这将返回:
[0]: "ID"
[1]: "a"
[2]: "b"
答案 1 :(得分:0)
作为一个快速的爆破(可能不是最好的,但这是匆忙做的 - 匆忙!!):
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
希望这是有道理的