如果将.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();
答案 0 :(得分:2)
是否使用new
无关紧要。这是LINQ方法。隐藏的查询语法from - select
是Select()
,one of the methods with deferred execution。
因此,第二个代码片段是用延迟执行组成查询表达式的完美有效方法,该查询表达式的执行不会早于ToList
。