2013-10-08 133 views
2

我試着去發現LINQ一些參考資料與動態加強類型,靜態我爲例子:LINQ和動態強類型

 var rowColl = _data.AsEnumerable(); 
     var json = (from r in rowColl 
        select new 
        { 
         name = r.Field<string>("name"), 
         id = r.Field<int>("id"), 
        }).ToList(); 

現在,我很感興趣,如果可能做出「名」和「ID」動態添加在運行時,因爲信息是可用的DataTable「_data」,我認爲有一個簡單的解決方案,但無法找到任何這方面的參考

+0

沒有。編譯器會在編譯時爲您創建一個匿名類。儘管可以在運行時創建新類型。請參閱'Reflection.Emit'命名空間。 – sircodesalot

+0

和一個不簡單的解決方案,我非常肯定,我不是第一個有這個問題的人 –

+0

'Reflection.Emit'確實需要一些練習才能掌握。決定不適合初學者。 – sircodesalot

回答

0

最好避免使用「var」儘可能的你的類型。它看起來像rowColl類型IEnumerable <DataRow>。如果這是真的,那麼我會看看你可以在DataRow類中使用什麼(請參閱msdn documentation)。

鑑於rowColl實際上是IEnumerable <DataRow> ...如果列總是按照相同的順序,那麼你可以在你的select語句中做一些像r [0]和r [1]即

var json = (from r in rowColl 
      select new 
      { 
       name = r[0], // Where 0 is the index of the "name" column 
       id = r[1], 
      }).ToList(); 

如果抱怨你的類型安全,那麼你可以使用int.Parse()將字符串轉換爲int並使用您列的ToString()擴展來代替。

+0

不是與問題有關 –