У меня есть a DataSet
и я хочу преобразовать DataSet
в List<T>
T - текстовый объект
Как преобразовывают мой DataSet
? Это имеет 10 столбцов со всеми 10 свойствами, которые имеет мой объект, и это возвращает более чем 15 000 строк. Я хочу возвратить тот набор данных в List<obj>
и цикл это, как я делаю это?
Это практически то же самое, что и другие ответы, но вводит сильно типизированные колонки.
var myData = ds.Tables[0].AsEnumerable().Select(r => new {
column1 = r.Field<string>("column1"),
column2 = r.Field<int>("column2"),
column3 = r.Field<decimal?>("column3")
});
var list = myData.ToList(); // For if you really need a List and not IEnumerable
Думаю, это должно сработать.
var output = yourDataSet.Tables[0].Rows.Cast<DataRow>().Select(r => new
{
Column1 = r["Column1"].ToString(),
Column2 = r["Column2"].ToString(),
Column3 = r["Column3"].ToString(),
Column4 = r["Column4"].ToString(),
Column5 = r["Column5"].ToString(),
Column6 = r["Column6"].ToString(),
Column7 = r["Column7"].ToString(),
Column8 = r["Column8"].ToString(),
Column9 = r["Column9"].ToString(),
Column10 = r["Column10"].ToString()
}).ToList();
Я знаю, что @bharat запросил решение с использованием LINQ, но в основном для себя я хотел сравнить решение @Kelsey с старомодным способом сделать это:
List<Obj> list = new List<Obj>();
foreach (DataRow r in yourDataSet.Tables[0].Rows)
{
Obj obj = new Obj();
obj.Column1 = r["Column1"];
obj.Column2 = r["Column2"];
obj.Column3 = r["Column3"];
obj.Column4 = r["Column4"];
obj.Column5 = r["Column5"];
obj.Column6 = r["Column6"];
obj.Column7 = r["Column7"];
obj.Column8 = r["Column8"];
obj.Column9 = r["Column9"];
obj.Column10 = r["Column10"];
list.Add(obj);
}
Или через конструктор:
List<Obj> list = new List<Obj>();
foreach (DataRow r in yourDataSet.Tables[0].Rows)
{
Obj obj = new Obj(r["Column1"], r["Column2"], r["Column3"], r["Column4"], r["Column5"],r["Column6"], r["Column7"], r["Column8"], r["Column9"],r["Column10"]);
list.Add(obj);
}
Я намеренно оставил .ToString ()
, потому что я думаю, что его использование зависит от ситуации.
Прежде всего, вы на правильном пути, но вы должны думать в терминах IEnumerable
, а не List
. И вот как вы это сделаете:
var myData = ds.Tables[0].AsEnumerable()
.Select(r => new {column1 = r[0].ToString(),
column2 = r[1].ToString()
/*etc*/
});
Never преобразовать IEnumerable в List, прежде чем вам это абсолютно необходимо.