набор данных для Списка <T> с помощью linq

У меня есть a DataSet и я хочу преобразовать DataSet в List<T>

T - текстовый объект

Как преобразовывают мой DataSet? Это имеет 10 столбцов со всеми 10 свойствами, которые имеет мой объект, и это возвращает более чем 15 000 строк. Я хочу возвратить тот набор данных в List<obj> и цикл это, как я делаю это?

5
задан Kelsey 26 May 2010 в 21:44
поделиться

4 ответа

Это практически то же самое, что и другие ответы, но вводит сильно типизированные колонки.

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
16
ответ дан 18 December 2019 в 06:34
поделиться

Думаю, это должно сработать.

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();
4
ответ дан 18 December 2019 в 06:34
поделиться

Я знаю, что @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 () , потому что я думаю, что его использование зависит от ситуации.

0
ответ дан 18 December 2019 в 06:34
поделиться

Прежде всего, вы на правильном пути, но вы должны думать в терминах IEnumerable, а не List. И вот как вы это сделаете:

 var myData = ds.Tables[0].AsEnumerable()
                  .Select(r => new {column1 = r[0].ToString(), 
                                    column2 = r[1].ToString() 
                                    /*etc*/
                          });

Never преобразовать IEnumerable в List, прежде чем вам это абсолютно необходимо.

4
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: