2017-06-20 51 views
-2

我有linq查询选择新类型。这就是为什么我不能复制到数据表。它只转换成如下所示的列表;在Linq中选择新的查询复制到数据表

我怎样才能复制到选择新的查询数据表?

var result = (from dr1 in dtTopAllTempOld.AsEnumerable() 
          from dr2 in dtTopAllTemp.AsEnumerable() 
          where dr1.Field<string>("EVENT") == dr2.Field<string>("EVENT") && dr1.Field<int>("INST_ID") == dr2.Field<int>("INST_ID") 
          select new 
          { 
           SAMPLE_TIME = dr1.Field<DateTime>("SAMPLE_TIME"), 
           INST_ID = dr1.Field<int>("INST_ID"), 
           WAIT_CLASS = dr1.Field<string>("WAIT_CLASS"), 
           EVENT = dr1.Field<string>("EVENT"), 
           WAITS = Math.Round((dr2.Field<double>("WAITS") - dr1.Field<double>("WAITS"))/timeTopActivity) 
          }).ToList(); 
+0

请看看这个链接也在将来,请帮助自己执行一个简单的谷歌搜索,https://stackoverflow.com/questions/34001672/linq-convert-linq-select-to-datatable – MethodMan

+0

@doctorcesar你不需要选择新的加入数据表 – Slai

+0

@Slai你好另一个爱因斯坦。如果在列之间进行减法,则必须使用select new作为新类型。做一个简单的谷歌搜索。 –

回答

0
var dt = new DataTable(); 
// add columns here (dt.Columns.Add("name", typeof(type)) 
foreach(var r in result){ 
    var dr = dt.NewRow(); 
    dr[0] = r.SAMPLE_TIME; 
    dr[1] = ... 
    // continue for all columns/anonymous type fields 
    dt.Rows.Add(dr); 
} 

即使有上千列,它应该是一个快速的操作。我一直在为了更改列的数据类型而必须这样做 - 在这种情况下,我克隆DataTable的模式,切换类型,然后以类似的方式重新导入DataRows。