Convert DataTable to IEnumerable

前端 未结 8 1616
梦毁少年i
梦毁少年i 2020-11-29 22:50

I am trying to convert a DataTable to an IEnumerable. Where T is a custom type I created. I know I can do it by creating a List but I was thinking if t

8条回答
  •  心在旅途
    2020-11-29 23:22

    Simple method using System.Data.DataSetExtensions:

    table.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"]),
        });
    

    Or:

    TankReading TankReadingFromDataRow(DataRow row){
        return 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"]),
        };
    }
    
    // Now you can do this
    table.AsEnumerable().Select(row => return TankReadingFromDataRow(row));
    

    Or, better yet, create a TankReading(DataRow r) constructor, then this becomes:

        table.AsEnumerable().Select(row => return new TankReading(row));
    

提交回复
热议问题