对IQueryable对象执行Any()子句

时间:2015-03-19 16:44:32

标签: 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() )
 }

现在我想了解的是,如果Any()子句是immidiatly执行的,或者它是否生成将与之前合并的T-SQL。 我问这个因为我不想在那一刻对数据库执行查询。

编辑: 感谢您使用&#39;的建议。条款,这是我现在做的一个错误(编写这个代码示例),因为我现在无法测试代码(此时我的机器上没有可视化工作室)但我的问题一般是关于那种情况。

2 个答案:

答案 0 :(得分:6)

Any位于Queryable.Where中的lambda内部,因此不会作为C#代码执行,而是转换为Expression并在IQueryable时传递给查询提供程序从Where返回的{1}}被重复。

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

答案 1 :(得分:3)

它是查询的一部分 - 它在Where子句中。

所以不,它不会立即执行。话虽如此,您似乎正在关闭查询使用的上下文,所以我怀疑,当 使用时,它将被破坏......