调用 Select New 是否会导致执行基础查询?
Does calling Select New result in the underlying query being executed?
如果将 .ToList() 附加到查询,则会导致查询针对数据库执行。如果您使用 Select New
这会立即执行查询,还是仍然允许在执行前更改查询?
如果需要,这里有一个例子:
var query = db.Cars();
if(model.CarNameSearch != "")
query = query.where(u => u.CarName == model.CarNameSearch);
return query.ToList();
在上面的示例中,直到调用 .ToList() 后查询才真正对数据库执行。
如果我这样做,Select 新结果会在 return 之前执行的查询中产生:
var query = from cars in db.Cars
select New MyResult{
MyModelCarName = cars.CarName,
MyModelCarColor= cars.Color
};
if(model.CarNameSearch != "")
query = query.where(u => u.MyModelCarName == model.CarNameSearch);
return query.ToList();
是否使用new
在这里并不重要。这是 LINQ 方法。查询语法 from - select
在幕后是 Select()
而这是 one of the methods with deferred execution.
因此,第二个代码片段是编写延迟执行的查询表达式的完全有效的方法,该查询表达式的执行时间不会早于 ToList
。
如果将 .ToList() 附加到查询,则会导致查询针对数据库执行。如果您使用 Select New
这会立即执行查询,还是仍然允许在执行前更改查询?
如果需要,这里有一个例子:
var query = db.Cars();
if(model.CarNameSearch != "")
query = query.where(u => u.CarName == model.CarNameSearch);
return query.ToList();
在上面的示例中,直到调用 .ToList() 后查询才真正对数据库执行。
如果我这样做,Select 新结果会在 return 之前执行的查询中产生:
var query = from cars in db.Cars
select New MyResult{
MyModelCarName = cars.CarName,
MyModelCarColor= cars.Color
};
if(model.CarNameSearch != "")
query = query.where(u => u.MyModelCarName == model.CarNameSearch);
return query.ToList();
是否使用new
在这里并不重要。这是 LINQ 方法。查询语法 from - select
在幕后是 Select()
而这是 one of the methods with deferred execution.
因此,第二个代码片段是编写延迟执行的查询表达式的完全有效的方法,该查询表达式的执行时间不会早于 ToList
。