C# linq按列名称列表选择一个新的

C# linq按列名称列表选择一个新的,c#,sql,linq,C#,Sql,Linq,我有一个从DB获得的数据表, 我想通过linq检索数据 数据库中的我的数据表 +-----------------+-----------------+-----------------+ | column_1 | column_2 | column_3 | +-----------------+-----------------+-----------------+ | data_column_1_1 | data_column_2_1 | data_

我有一个从DB获得的数据表,
我想通过linq检索数据

数据库中的我的数据表

+-----------------+-----------------+-----------------+
|    column_1     |    column_2     |    column_3     |
+-----------------+-----------------+-----------------+
| data_column_1_1 | data_column_2_1 | data_column_3_1 |
| data_column_1_2 | data_column_2_2 | data_column_3_2 |
| data_column_1_3 | data_column_2_3 | data_column_3_3 |
| data_column_1_4 | data_column_2_4 | data_column_3_4 |
+-----------------+-----------------+-----------------+
我不知道表中的列数
但是我是否得到了另一个包含所有列名称的表

列名

+----------------+
| column's names |
+----------------+
| column_1       |
| column_2       |
| column_3       |
+----------------+
我该怎么做? 我希望它看起来像这样

var list=DataTableFromDB.aseneumerable()。选择(x=>new
{
第1行=x.字段(“第1行”),
第2行=x.字段(“第2行”),
}); 
但在动态上,, 可以帮助我吗?

使用and Add()方法(带cast to)向扩展对象添加动态属性

代码:

var list=DataTableFromDB.AsEnumerable()。选择(x=>
{
var sampleObject=new ExpandoObject();
foreach(列名称中的变量列)
{
((IDictionary)sampleObject)
.添加(列,x.字段(列));
}
返回样本对象;
}); 

try我想像数据成员一样获取它,而不是像dictionary(key,value)@lealam一样,如果您将sampleObject声明为动态,则可以动态访问该成员。那你想怎么做?
  var list = DataTableFromDB.AsEnumerable (). Select (x => new 
{
  row1 = x.Field <string> ("row1"), 
  row2 = x.Field <string> ("row2"), 
}); 
var list = DataTableFromDB.AsEnumerable().Select(x => 
            {
                var sampleObject = new ExpandoObject();
                foreach (var col in columnsNames)
                {
                    ((IDictionary<String, Object>)sampleObject)
                     .Add(col, x.Field<string>(col));
                }
                return sampleObject;
            });