【问题标题】:Do LINQ "queries" get compiled into actual SQL stored procedures?LINQ“查询”是否被编译成实际的 SQL 存储过程?
【发布时间】:2015-11-20 21:09:11
【问题描述】:
我是一名 ASP.NET n00b,我在我的 ASP.NET 书中读到,当您编译项目时,您的 C# LINQ 代码会变成实际的 SQL 查询。我在互联网上找不到任何东西来验证这一点;但是,如果这是真的,我想知道存储过程是否是从 LINQ 查询创建的;如果没有,LINQ 的意义何在?我很困惑,为什么知道如何编写 SQL 的人会花时间学习“有效的 C#,看起来像 SQL,但不完全是 SQL”...
我看到了一个相关的帖子LINQ queries vs Stored procedures,但它是在2011年写的。
【问题讨论】:
标签:
c#
sql
asp.net
asp.net-mvc
stored-procedures
【解决方案1】:
不,对数据库的 LINQ 查询不会转换为存储过程。如果底层数据库语言是 SQL,例如 SQL Server / Oracle,它们将被转换为 SQL。
您混淆了ORM 和 LINQ。 LINQ 不仅仅是查询数据库。它还涉及查询一般集合,如arrays/List<T> (IEnumerable<T>)。
【讨论】:
-
是的。 LINQ to objects 是关于在内存集合中查询。 (虽然 LINQ to entity 可以在没有 sql dbs 的情况下使用,like,在这种情况下不会生成 SQL).
【解决方案2】:
除了上述答案之外,LINQ 是 .NET Framework 的功能,它是强类型的,不特定于实体框架 (ORM),甚至不依赖于数据库。有不同的 LINQ 提供程序,即 LINQ to Entities 负责将 LINQ 转换为对数据的适当查询并返回结果。
所以这对于那些还不了解 SQL 并且想要根据对象来处理表和数据的人来说会大放异彩。