C# Sql原始查询或Linq的最佳方式是什么

C# Sql原始查询或Linq的最佳方式是什么,c#,sql,stored-procedures,linq-to-sql,linq-to-entities,C#,Sql,Stored Procedures,Linq To Sql,Linq To Entities,我更熟悉SQL原始查询。大多数时候,我使用存储过程进行复杂查询,插入、删除、更新和选择一条记录都是通过使用简单的实体框架方法和Linq查询来完成的。使用Linq和SQL行查询的优点和缺点以及最佳实践是什么。SQL几乎总是(非常)快,因为它在返回特定数据集方面得到了高度优化。它使用复杂的索引来管理知道在哪里查找数据的信息,以便能够做到这一点。不过,这通常也取决于数据库维护。例如,您可以通过向数据库添加索引来加快数据库搜索的速度,因此您可以看到,如果要优化性能,SQL需要做的工作比简单地编写存储过程

我更熟悉SQL原始查询。大多数时候,我使用存储过程进行复杂查询,插入、删除、更新和选择一条记录都是通过使用简单的实体框架方法和Linq查询来完成的。使用Linq和SQL行查询的优点和缺点以及最佳实践是什么。

SQL几乎总是(非常)快,因为它在返回特定数据集方面得到了高度优化。它使用复杂的索引来管理知道在哪里查找数据的信息,以便能够做到这一点。不过,这通常也取决于数据库维护。例如,您可以通过向数据库添加索引来加快数据库搜索的速度,因此您可以看到,如果要优化性能,SQL需要做的工作比简单地编写存储过程要多

另一方面,Linq实现起来要快得多,而SQL存储过程往往需要更长的时间来编写,并且不需要对数据执行维护。我个人觉得SQL很难阅读,而Linq和编程代码对我来说是很自然的

因此,我认为SQL更快、更乏味,而编程方法更慢,但更容易实现


如果您使用的是一个小数据集,那么您可能不必使用Linq,但是如果您使用的是一个大数据库,那么SQL几乎总是一个不错的选择。

“原始”SQL很可能会更快(如果您自己擅长编写SQL语句),但是Linq对于程序员的工作效率会更高(您可以更快地完成任务,必须编写更少枯燥且容易出错的代码)另外,不要忘记,并非所有的事情都可以在LINQ中完成。我80%的工作都使用EF,但我经常调用存储过程来完成我在LINQ中无法完成的事情。比如用没有LINQ表示的复杂结构更新分区或SQL。或者-咳嗽,遗憾的是-暗示。EF甚至不支持锁提示…不好意思.