调用 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