簡體   English   中英

將數據表轉換為不可數 <anonymous> ?

[英]Converting Datatable to ienumerable<anonymous>?

是否可以在不知道其類名的情況下將數據表轉換為ienumerable。

我的要求是轉換表

First | Last
--------------
john  | mcgill
clara | linda   

{{First:john,Last:mcgill},{First:clara ,Last:linda}}

不可思議的收藏品

我不想使用動態對象,因為動態對象僅支持框架工作4。

謝謝

var results = from row in dataTable.AsEnumerable()
              select new {
                  First = row.Field<string>("First"),
                  Last = row.Field<string>("Second")
              };

您將需要System.Data.DataSetExtensions

請不要列名!

    public string ConvertDataTableToString(DataTable table)
    {
        int iColumnCount = table.Columns.Count;
        int iRowCount = table.Rows.Count;
        int iTempRowCount = 0;
        string strColumName = table.Columns[0].ColumnName;
        string strOut = "{";
        foreach (DataRow row in table.Rows) 
        {
            strOut = strOut + "{";
            foreach (DataColumn col in table.Columns)
            {
                string val = row.Field<string>(col.ColumnName);
                strOut = strOut + col.ColumnName + ":" + val;

                if (col.Ordinal != iColumnCount - 1)
                {
                    strOut = strOut + ",";
                }
            }
            strOut = strOut + "}";
            iTempRowCount++;

            if (iTempRowCount != iRowCount)
            {
                strOut = strOut + ",";
            }
        }
        strOut = strOut + "}";
        return strOut;
    }

您可以使用匿名類型 - 它們是在.NET 3.5中引入的。

這種對象的語法非常清晰直觀:

var item = new { First = "First-Value", Last = "Last-Value" }

和查詢:

var items = dataTable.AsEnumerable()
                     .Select(i => new {
                                           First = i.Field<string>("First"),
                                           Last= i.Field<string>("Last")
                                      });

使用匿名類型是一件相當容易的工作。 這是一個完整的示例,只需要System.Linq和System.Data命名空間中的類:

  class Program
  {
    static void Main(string[] args)
    {
      DataTable dataTable = new DataTable();
      dataTable.Columns.Add().ColumnName = "First";
      dataTable.Columns.Add().ColumnName = "Last";
      var row = dataTable.NewRow();
      row["First"] = "hello";
      row["Last"] = "world";
      dataTable.Rows.Add(row);

      var query = dataTable.Rows.Cast<DataRow>()
        .Select(r => new
        {
          First = r["First"],
          Last = r["Last"]
        });

      foreach (var item in query)
        Console.WriteLine("{0} {1}", item.First, item.Last);
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM