Как преобразовать DataSet / DataTable в общий список определенного типа? - PullRequest
2 голосов
/ 21 октября 2010

Я посмотрел на отвеченную тему с ответом: Список список = dt.AsEnumerable (). ToList ();

Однако, что если вы хотите преобразовать в список какого-либо типа сущности? Например, у меня есть класс сущности Property:

public class Property
    {
        public int ID { get; set; }
        public string Chain { get; set; }
        public string Name { get; set; }
        public string Street { get; set; }
        public string Street2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string PostalCode { get; set; }
        public string Country { get; set; }
        public string Phone { get; set; }
        public string FAX { get; set; }
        public string Longitude { get; set; }
        public string Latitude { get; set; }
        public string Airport { get; set; }
    }

Мне нужно работать с Oracle SP, который возвращает DataSet. Что я хочу сделать, это преобразовать DataSet (или DataTable) в список

DataSet ds = ("вызов SP"); List = ds.something;

Ответы [ 5 ]

5 голосов
/ 21 октября 2010

Вы можете рассмотреть LINQ в этом случае.

var list = (from dr in dt.AsEnumerable()
           select new Property { .... }).ToList();

Создает список как результат.

Редактировать: Мягкое первое предложение.

1 голос
/ 21 октября 2010

Просто примечание.Я шел по этому пути раньше и обнаружил, что большую часть времени мне не нужна какая-то оболочка класса сущности для данных.Вместо этого обычный доступ к строкам / столбцам самого объекта данных был просто нормальным.Это сэкономило время обработки и потребление памяти, просто передавая таблицу.

Обычно, если я извлекаю данные из процедуры для отображения, я оставляю их в таблице.Однако, если у меня есть класс, который включает в себя дополнительные функциональные возможности, помимо хранения данных, я могу преобразовать данные в список / коллекцию объектов.

С другой стороны, если данные возвращаются из браузера, тогдаЯ заполняю объект, к определению класса которого привязана вся связанная проверка перед сохранением в базе данных.

Дело в том, что если класс сущности не даст вам то, чего у вас еще неттогда я бы не стал беспокоиться

0 голосов
/ 21 октября 2010

Другой пример:

Я написал эту статью несколько месяцев назад:

http://www.codeproject.com/KB/linq/FromDataTable2GenericList.aspx

Надеюсь, это поможет!

0 голосов
/ 21 октября 2010

Вы также можете использовать метод LINQ Select()

DataTable dt = new DataTable
var list = dt.Rows.Select(row => new Propert
{
SomeProperty = row["columnName"],//etc...
}).ToList();
0 голосов
/ 21 октября 2010

Хотя это в VB, вы можете преобразовать его в C # и использовать его:

Как преобразовать набор данных или dbreader в List (из T) или BindingList (Of T), используяотображение

http://prglog.blogspot.com/2009/10/how-to-convert-listof-t-or.html

Похоже, что оно использует отражение и будет работать с любым типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...