Как создать объект из datareader из двух таблиц (sql statemens) - PullRequest
0 голосов
/ 20 июля 2011

У меня есть два класса Car и Drivers:

public class Car
{
    public string Status { get; set; }
    public IList<Driver> Event { get; set; }
}

public class Driver
{
    public string Name { get; set; }
    ....
}

Я получаю значения от ДВУХ SQL-операторов (например, Выбрать * из машины; Выбрать * из драйвера).Я могу заполнить первый с:

while (rdr.Read())
{
    _results.Add(new TaskModel(rdr));
    //new TaskModel(rdr); 
}

, где _results это:

private ObservableCollection<Car> _results = new ObservableCollection<Car>();

Конструктор для автомобиля выглядит так:

public Car(IDataRecord record)
{
    this.CarId = Convert.ToInt32(record["CARID"]);
    this.Color = (string)record["COLOR"];
}

Яспрашиваю себя, как заполнить хранилище данных двумя государственными деятелями и обратиться к конструктору, чтобы получить весь объект (Автомобиль с водителем)

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Как насчет извлечения всех данных за один раз, как в

SELECT * FROM Car INNER JOIN Driver ON Car.Id = Driver.CarId

А затем создайте свой граф объектов с этого момента?

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

ПРИСОЕДИНИТЬСЯ к фундаментам .

0 голосов
/ 20 июля 2011

Если вы не можете изменить запрос на внутреннее соединение, как подсказывает @BennyM, вы можете вместо этого объединить объекты с помощью LiNQ.Сначала создайте один List<Car> Cars и один List<Driver> Drivers и заполните их, используя datareader (s), затем присоедините их следующим образом:

from c in Cars
join d in Drivers on d.CommonKey = c.CommonKey //Your code samples doesn't mention any key connecting the two objects, so please adjust this to whatever it should be.
select new { c, d }

Это, конечно, менее хорошее решение, чем исправление реального SQL-запроса...

0 голосов
/ 20 июля 2011

Вы можете взглянуть на шаблон отображения данных. Вы создаете тесную связь между вашим доменом и доступом к данным. Ты не хочешь этого делать:)

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