基于集合的执行; SQL和.NET

在SQL中,应始终努力进行基于集合的操作而不是基于迭代的(即循环)。在.NET中,我们经常循环集合和对象。 .NET中是否有允许基于集合处理的命令,或者是基于迭代的所有命令? (我想起了
DataAdapter.Fill
如何调用
DataReader
迭代结果集中的每条记录)。我并不十分熟悉
LINQ
,但我的猜测是它的实现只是掩盖了幕后发生的迭代。 更新: 澄清一点:我并不是说自己在这里有任何天才,我不是第二个猜测让我的人生编程变得更好的优秀人才。我只是在询问是否有执行基于集合的操作的命令,比如SQLdoes3ѭ时的命令,而
foreach(var item in obj) { ... }
则显然是在迭代对象。如果他们使用循环,SQL开发人员就会受到严厉批评,但在.NET中,我们会一直使用它们。作为一个在SQL和.NET上都很重要的开发者,我在问.NET中是否有任何替代方法可以完全避免循环。     
已邀请:
  我对LINQ并不十分熟悉,但我的猜测是它的实现只是掩盖了幕后发生的迭代。 您如何看待SQL呢?并不是迭代不会发生。这是你如何在代码中表达你的意图的问题。基于集合和声明性操作告诉平台您想要什么,然后将其留给平台以确定如何最好地完成它。它的工作原理是因为允许这种代码的平台是他们所在领域的专家系统,所以它比人类希望的要好得多。另一方面,命令式或程序性代码告诉平台确切地做什么以及如何做。这样可以减少机器优化的空间,通常需要更多代码,并且更容易出错。     
LINQ-to-SQL查询是真正基于集合的操作。迭代发生的唯一时间是直接或通过
foreach
语句调用
GetEnumerator
。 这是因为LINQ-to-SQL以IQueryable< T>开头(其中T是一个充当表的代理的类),并且您应用于IQueryable<>的每个LINQ操作都返回另一个IQueryable<>。在幕后,LINQ根本不访问数据库,而是建立一个越来越复杂的LINQ表达式。当您最终要求枚举结果时,LINQ将获取整个表达式并将其转换为SQL查询,该查询作为单个请求进入数据库。     

要回复问题请先登录注册