针对 IQueryable 对象执行 Any() 子句

Execution of Any() clause against IQueryable object

我有一个 IQueryable 对象,它表示对我的数据库模型的一些查询。 现在我需要对该 IQeryable 进行一些验证,并 return 以这种方式返回对象

 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() 子句是立即执行还是生成 T-SQL 将与之前的子句合并。 我问这个是因为我会避免在那一刻对数据库执行查询。

编辑: 感谢 'using' 子句的建议,这是我现在犯的错误(编写此代码示例),因为我现在无法测试代码(此刻我的机器上没有 visual studio ) 但我的问题一般是关于这种情况。

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

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

AnyQueryable.Where 中的 lambda 内部,因此不作为 C# 代码执行,而是转换为 Expression 并传递给查询提供程序来自 WhereIQueryable return 被迭代。

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