c# - 将 DataTable 转换为 IEnumerable<T>

标签 c# datatable ienumerable

我正在尝试将 DataTable 转换为 IEnumerable。其中 T 是我创建的自定义类型。我知道我可以通过创建 List<T> 来做到这一点但我在想是否有一种更巧妙的方法可以使用 IEnumerable 来做到这一点。这是我现在拥有的:

private IEnumerable<TankReading> ConvertToTankReadings(DataTable dataTable)
{
    var tankReadings = new List<TankReading>();
    foreach (DataRow row in dataTable.Rows)
    {
        var tankReading = 
              new TankReading
              {
                  TankReadingsID = Convert.ToInt32(row["TRReadingsID"]),
                  TankID = Convert.ToInt32(row["TankID"]),
                  ReadingDateTime = Convert.ToDateTime(row["ReadingDateTime"]),
                  ReadingFeet = Convert.ToInt32(row["ReadingFeet"]),
                  ReadingInches = Convert.ToInt32(row["ReadingInches"]),
                  MaterialNumber = row["MaterialNumber"].ToString(),
                  EnteredBy = row["EnteredBy"].ToString(),
                  ReadingPounds = Convert.ToDecimal(row["ReadingPounds"]),
                  MaterialID = Convert.ToInt32(row["MaterialID"]),
                  Submitted = Convert.ToBoolean(row["Submitted"]),
              };

        tankReadings.Add(tankReading);
    }
    return tankReadings.AsEnumerable();
}

关键部分是我正在创建一个 List<T>然后使用 AsEnumerable() 返回它.

最佳答案

还有一个名为“AsEnumerable()”(在 System.Data 中)的 DataSetExtension 方法,它接受一个 DataTable 并返回一个 Enumerable。参见 the MSDN doc了解更多详情,但基本上很简单:

dataTable.AsEnumerable()

缺点是它枚举的是 DataRow,而不是您的自定义类。 “Select()”LINQ 调用可以转换行数据,但是:

private IEnumerable<TankReading> ConvertToTankReadings(DataTable dataTable)
{
    return dataTable.AsEnumerable().Select(row => new TankReading      
            {      
                TankReadingsID = Convert.ToInt32(row["TRReadingsID"]),      
                TankID = Convert.ToInt32(row["TankID"]),      
                ReadingDateTime = Convert.ToDateTime(row["ReadingDateTime"]),      
                ReadingFeet = Convert.ToInt32(row["ReadingFeet"]),      
                ReadingInches = Convert.ToInt32(row["ReadingInches"]),      
                MaterialNumber = row["MaterialNumber"].ToString(),      
                EnteredBy = row["EnteredBy"].ToString(),      
                ReadingPounds = Convert.ToDecimal(row["ReadingPounds"]),      
                MaterialID = Convert.ToInt32(row["MaterialID"]),      
                Submitted = Convert.ToBoolean(row["Submitted"]),      
            });
}

关于c# - 将 DataTable 转换为 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392612/

相关文章:

c# - 如何获取 Internet Explorer 和 Firefox 选项卡的内存详细信息?

c# - Distinct concat 两个 IEnumerables 并标记它是否来自列表 B

c# - 带有 DbSet 的 LINQ ToListAsync 表达式

javascript - JQuery DataTables - 隐藏表直到搜索

javascript - jquery使用子节点修改复选框属性

c# - GroupByUntilChanged : is there a LINQ GroupBy operator that groups by SUCCESSIVE equal keys?

c# - 如何模拟Azure.Storage.Blobs的BlobContainerClient()?

c# - 在 NUnit 中,如何为结构的属性比较指定容差?

c# - 使用 Json.NET 反序列化复杂对象

javascript - jQuery 数据表排序问题