如何从两个表(sql语句)的数据读取器创建对象
本文关键字:语句 数据 读取 创建对象 sql 两个 | 更新日期: 2023-09-27 18:02:57
我有两个类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语句(例如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)
如何一次检索所有数据,如
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 }