首页 > 解决方案 > 调用 Select New 是否会导致正在执行的基础查询?

问题描述

如果将 .ToList() 附加到查询中,则会导致针对数据库执行查询。如果您使用Select New它是否也会立即执行查询,还是仍然允许在执行前更改查询?


如果需要,这里有一个例子:

var query = db.Cars();

if(model.CarNameSearch != "")
   query = query.where(u => u.CarName == model.CarNameSearch);

return query.ToList();

在上面的示例中,在调用 .ToList() 之前,查询实际上不会对数据库执行。

相反,如果我这样做,则 Select New 是否会导致在返回之前执行的查询:

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();

标签: entity-frameworklinqlinq-to-entities

解决方案


使用new与否在这里并不重要。这是LINQ方法。查询语法from - selectSelect()幕后,这是延迟执行的方法之一

因此,第二个代码片段是一种完美有效的方式来组合具有延迟执行的查询表达式,该延迟执行将不早于ToList.


推荐阅读