对IQueryable对象执行Any()子句

Ska*_*ary 0 c# linq iqueryable

我有一个对象IQueryable,代表我的db-model上的一些查询.现在我需要对那个IQeryable进行一些验证并以这种方式返回对象

 private IQuerable<myTableType> ValidateQery ( IQuerable<myTableType> query , string user )
 {
           return query.Where ( x => db.tblUsers.Where( y => y.User == user && y.Privilege >= x.PrivilegeRequired).Any() )
 }
Run Code Online (Sandbox Code Playgroud)

现在我想了解的是,如果Any()子句是immidatly执行的,或者它是否生成将与之前合并的T-SQL.我问这个因为我不应该在那一刻避免对db执行查询.

编辑:感谢'using'子句的建议,这是我现在做的一个错误(编写这个代码示例),因为我现在无法测试代码(我这时机器上没有可视化工作室)但是我的问题一般是关于那种情况.

Ser*_*rvy 6

Any位于lambda中Queryable.Where,因此不会作为C#代码执行,而是Expression在迭代IQueryable返回的from 时转换为a 并传递给查询提供程序Where.

在站点节点上,您可以在IQueryable返回之前处理上下文,因此在迭代它时它总是会失败.