正在将Datatable转换为ienumerable<;匿名>;

本文关键字:lt 匿名 gt ienumerable Datatable 转换 | 更新日期: 2023-09-27 18:29:58

是否可以在不知道类名的情况下将数据表转换为ienumerable。

我的要求是转换表

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

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

Ienumerable集合

我不想使用动态对象,因为动态对象只支持框架4。

感谢

正在将Datatable转换为ienumerable<;匿名>;

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

您需要System.Data.DataSetExtensions

您可以使用匿名类型-它们是在.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")
                                      });

请不要使用列名!

    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;
    }

使用匿名类型是一项相当简单的工作。下面是一个完整的例子,它只需要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);
    }
  }