简体   繁体   English

linq通过列名称列表选择一个新的

[英]linq select a new, by list of columns names

I have a dataTable that I get from DB, 我有一个从DB获得的dataTable,
And I want to retrieve the data by linq 我想通过linq检索数据

my dataTable From DB 我的数据表从数据库

+-----------------+-----------------+-----------------+
|    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 |
+-----------------+-----------------+-----------------+

I do not know the number of columns in the table 我不知道表中的列数
but did I get another table with the names of all columns 但是我得到另一个带有所有列名称的表吗

the column's names 列的名称

+----------------+
| column's names |
+----------------+
| column_1       |
| column_2       |
| column_3       |
+----------------+

How do I do this? 我该怎么做呢? I want it to look like this 我希望它看起来像这样

  var list = DataTableFromDB.AsEnumerable (). Select (x => new 
{
  row1 = x.Field <string> ("row1"), 
  row2 = x.Field <string> ("row2"), 
}); 

But dynamically, can help me? 但是动态地可以帮助我吗?

Use ExpandoObject and Add() method(with cast to IDictionary ) to add dynamic property to Expanded Object. 使用ExpandoObject和Add()方法( 强制转换为IDictionary )将动态属性添加到扩展对象。

Code: 码:

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;
            }); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM