将select new转换为DataTable?

Tru*_*an1 6 .net c# linq asp.net dataset

我使用的是.NET 3.5,需要将下面的select new结果转换为DataTable.是否有内置的东西或任何人知道的方法可以做到这一点?

var contentList = (from item in this.GetData().Cast<IContent>()
                  select new
                  {
                      Title = item.GetMetaData("Title"),
                      Street = item.GetMetaData("Street"),
                      City = item.GetMetaData("City"),
                      Country = item.GetMetaData("Country")
                  });
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nik 7

简单直接的事情是使用反射:

var records = (from item in this.GetData().Cast<IContent>()
                           select new
                           {
                               Title = "1",
                               Street = "2",
                               City = "3",
                               Country = "4"
                           });
var firstRecord = records.First();
if (firstRecord == null)
    return;

var infos = firstRecord.GetType().GetProperties();
DataTable table = new DataTable();
foreach (var info in infos) {
    DataColumn column = new DataColumn(info.Name, info.PropertyType);
    table.Columns.Add(column);
}

foreach (var record in records) {
    DataRow row = table.NewRow();
    for (int i = 0; i < table.Columns.Count; i++)
        row[i] = infos[i].GetValue(record);
    table.Rows.Add(row);
}
Run Code Online (Sandbox Code Playgroud)

代码可能没有预先提供,但应该给你一个大致的想法.首先,从匿名类型获取propertyInfos并使用此元数据创建数据表模式(填充列).然后使用这些信息从每个对象获取值.