2017-06-20 83 views
-1

我想將linq查詢複製到Datatable,但'CopyToDataTable'函數不起作用。如果我使用'select new',則複製到Datatable不起作用

它只適用於我使用ToList()但我不想使用列表,因爲需求。

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) 
     }).CopyToDataTable(); 
+3

*「不起作用」*?你能夠準確地描述*它如何不工作?它是否編譯?它運行嗎?什麼是「因爲要求」?什麼要求禁止你使用列表?實際代碼術語中「複製到數據表」是什麼意思?有沒有代碼?我們可以看到它嗎? –

+1

查看MoreLinq中的'ToDataTable'擴展方法。示例https://stackoverflow.com/a/42550827/2946329 –

+0

@EdPlunkett不,它不編譯只是拋出一個錯誤'沒有匿名類型到Datarows類型。 –

回答

1

只需使用pm安裝'更多Linq'包。

PM> Install-Package morelinq

然後你可以像下面一樣使用;

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) 
          }).ToDataTable(); 
+1

工作像一個魅力的傢伙。謝謝。 –

相關問題