我有一个对象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;的建议。条款,这是我现在做的一个错误(编写这个代码示例),因为我现在无法测试代码(此时我的机器上没有可视化工作室)但我的问题一般是关于那种情况。
答案 0 :(得分:6)
Any
位于Queryable.Where
中的lambda内部,因此不会作为C#代码执行,而是转换为Expression
并在IQueryable
时传递给查询提供程序从Where
返回的{1}}被重复。
在站点节点上,您可以在返回IQueryable
之前处置上下文,因此在迭代它时它总是会失败。
答案 1 :(得分:3)
它是查询的一部分 - 它在Where
子句中。
所以不,它不会立即执行。话虽如此,您似乎正在关闭查询使用的上下文,所以我怀疑,当 使用时,它将被破坏......