2011-03-17 66 views
3

我有一個動態生成的數據表,所以我不知道它包含的列數。我想構建一個包含每行中每個字段的列名和值的IEnumerable對象。是否可以從動態數據表中構建一個對象?

我不想使用DataRow對象作爲類型。

有沒有辦法做到這一點?

回答

3

它已經枚舉,爲什麼儘量做到枚舉時,它已經是:

// Results = DataSet 
foreach (DataTable table in results.Tables) 
{ 
    Console.WriteLine("Table: " + table.TableName); 
    foreach (DataRow row in table.Rows) 
    { 
     Console.WriteLine(" Row"); 
     foreach (DataColumn column in table.Columns) 
     { 
      Console.WriteLine(" " + column.ColumnName + ": " + 
       row[column]); 
     } 
    } 
} 
+0

是的,我知道,但就像我說的,我不希望使用的DataRow作爲類型。 – Tim 2011-03-17 20:31:14

+0

理想情況下,我想創建一個List <>對象,但我不知道如何做到這一點與未知列名 – Tim 2011-03-17 20:33:25

+0

可能是一本字典嗎? – Aidiakapi 2011-03-17 20:43:54

3

因爲我真的不明白你要完成的任務;或者更確切地說,你的最終目標是什麼,我把它作爲一個有趣的小練習。我使用了擴展方法;但有可能的方法來提高在其...

public static class DataTableExtension 
{ 
    public static IEnumerable<IEnumerable<KeyValuePair<string, object>>> Items(this DataTable table) 
    { 
     var columns = table.Columns.Cast<DataColumn>().Select(c => c.ColumnName); 
     foreach (DataRow row in table.Rows) 
     { 
      yield return columns.Select(c => new KeyValuePair<string, object>(c, row[c])); 

     } 
    } 
} 

static void Main(string[] args) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Last Name"); 
     table.Columns.Add("First Name"); 
     table.Rows.Add("Tim", "Taylor"); 
     table.Rows.Add("John", "Adams"); 
     foreach (var row in table.Items()) 
     { 
      foreach (var col in row) 
      { 
       Console.WriteLine("{0}, {1}\t", col.Key, col.Value); 
      } 

      Console.WriteLine(); 
     } 

     Console.ReadLine(); 
    } 

輸出看起來像這樣...

Last Name, Tim 
First Name, Taylor 

Last Name, John 
First Name, Adams 
相關問題