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;
    }        
}

Linq-to-SQL什么时候运行查询?

正确。SQL查询的执行被延迟,直到调用Single()。您可以通过这样分解查询并添加一个断点来确认这一点:

var carQuery = _dc.GetTable<DbCar>().Select(_mappedCar)  // <= breakpoint
var car = carQuery.Single(c => c.CarId == carId);

如果您对您的数据库运行一个分析器,您应该看到在您逐步执行代码时查询是在哪里执行的。

更多信息在这里:LINQ和延迟执行