调用Select New是否会导致执行基础查询?

时间:2018-10-08 18:11:35

标签: entity-framework linq linq-to-entities

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


如果需要,下面是一个示例:

var query = db.Cars();

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

return query.ToList();

在上面的示例中,直到调用.ToList()时,查询才真正针对数据库执行。

如果相反,我这样做是在返回之前执行的查询中选择“选择新结果”:

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

1 个答案:

答案 0 :(得分:2)

是否使用new无关紧要。这是LINQ方法。隐藏的查询语法from - selectSelect()one of the methods with deferred execution

因此,第二个代码片段是用延迟执行组成查询表达式的完美有效方法,该查询表达式的执行不会早于ToList