Linq-to-SQL什么时候运行查询?
本文关键字:查询 运行 什么时候 Linq-to-SQL | 更新日期: 2023-09-27 18:08:32
你能告诉我Linq2SQL在哪里对我的sql server执行查询吗?我希望它发生在我映射到我的域对象Car
之后。
public class Car
{
public Guid CarId { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public int HorsePower { get; set; }
}
public class CarRepository
{
private readonly MyDataContext _dc;
private readonly Func<DbCar, Car> _mappedCar =
c => new Car
{
CarId = c.CarId,
HorsePower = c.HorsePower,
Make = c.Make,
Model = c.Model,
};
public CarRepository(MyDataContext dc)
{
_dc = dc;
}
public Car GetCar(Guid carId)
{
var car = _dc.GetTable<DbCar>()
.Select(_mappedCar)
.Single(c => c.CarId == carId);
return car;
}
}
正确。SQL查询的执行被延迟,直到调用Single()
。您可以通过这样分解查询并添加一个断点来确认这一点:
var carQuery = _dc.GetTable<DbCar>().Select(_mappedCar) // <= breakpoint
var car = carQuery.Single(c => c.CarId == carId);
如果您对您的数据库运行一个分析器,您应该看到在您逐步执行代码时查询是在哪里执行的。
更多信息在这里:LINQ和延迟执行