如何从两个表(sql语句)的数据读取器创建对象

本文关键字:语句 数据 读取 创建对象 sql 两个 | 更新日期: 2023-09-27 18:02:57

我有两个类CarDrivers:

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

我从两个sql语句(例如Select * from car;选择* from driver)。我可以用

填充第一个
while (rdr.Read())
{
    _results.Add(new TaskModel(rdr));
    //new TaskModel(rdr); 
}

其中_results为:

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

Car的构造函数如下:

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

我在问自己如何用两个语句填充数据阅读器,并在构造函数中引用以获得整个对象(Car with Driver)

如何从两个表(sql语句)的数据读取器创建对象

如何一次检索所有数据,如

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

然后从那里创建你的对象图?

我也不会在构造函数中使用数据读取器,而是使用第三个对象从数据库中构造对象。

加入Fundamentels。

您可以看一下数据映射器模式。您正在创建域和数据访问之间的紧密耦合。你不需要这样做:)

如果你不能像@BennyM建议的那样将查询改为内部连接,那么你可以使用LiNQ来连接对象。首先创建一个List<Car> Cars和一个List<Driver> Drivers,并使用数据读取器填充它们,然后像这样连接它们:

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查询好的解决方案…