C# 我应该在SQL中还是在LINQ中执行Where子句?
我有一个方法可以将where子句传递给查询。然后,该方法返回一个数据集 什么更快更高效?要通过where子句使SQL Server发送回更少的数据(但必须做更多的工作),还是让web服务器通过LINQ处理它 编辑: 这是假设SQL Server比web服务器更强大(可能应该是这样) 如果未使用任何类型的C# 我应该在SQL中还是在LINQ中执行Where子句?,c#,asp.net,linq,C#,Asp.net,Linq,我有一个方法可以将where子句传递给查询。然后,该方法返回一个数据集 什么更快更高效?要通过where子句使SQL Server发送回更少的数据(但必须做更多的工作),还是让web服务器通过LINQ处理它 编辑: 这是假设SQL Server比web服务器更强大(可能应该是这样) 如果未使用任何类型的ORM,则使用where条件 在数据库级别,我认为应该在数据库级别进行过滤 水平 但是,如果您使用诸如实体框架或Linq to SQL之类的任何ORM,那么从性能角度来看,它与您的LinqWher
ORM
,则使用where
条件
在数据库级别,我认为应该在数据库级别进行过滤
水平
但是,如果您使用诸如
实体框架
或Linq to SQL
之类的任何ORM,那么从性能角度来看,它与您的Linq
Where
子句是相同的,因为您在IQuerable
SQL Server擅长过滤数据,事实上:这就是它的构建目的,所以请始终利用它。如果你用C#过滤;您将无法使用表上的任何索引。这将大大降低效率
只选择所有行以丢弃其中的许多行/大部分行是浪费的,这肯定会在性能中显示出来。您是否使用直接向上的ADO.Net来执行数据访问?如果是的话,那么是-在SQL中使用WHERE子句并限制发送回应用程序的数据量 SQL Server在这方面非常有效,您可以设计索引来帮助它访问数据,并且您将更少的数据传输回客户端应用程序 假设一个表中有20000行,但您只对其中的100行感兴趣。当然,只从源代码中获取100行并将其发回要有效得多,而不是在web应用程序中过滤所有行 您已经将linq标记为sql,如果是这种情况,那么在linq语句中使用WHERE子句将在sql Server上生成WHERE子句
但总的来说,只需获取您感兴趣的数据即可。通过网络传输的数据更少,查询通常会运行得更快(只要通过索引等对其进行优化),而且您的客户端应用程序所要做的工作也会更少,它已经只获得了它感兴趣的数据。从效率的角度看,应该由SQL server来完成这项工作。如果它不需要多个数据库调用,那么使用SQL server总是一个更好的解决方案。但是,如果您已经从数据库中获得了一个数据集,您可以使用LINQ对其进行过滤。他说查询返回一个数据集,因此他可能没有使用LINQ to SQL,而是直接使用ADO.NET。@JulianR他用LinqToSQL标记了他的问题,这会引起混淆。我现在已经取消标记了。始终只选择您需要的内容。没有什么比数据库更高效了。我希望如此,但显然情况并非总是如此。如果使用LINQ,数据库不会这样做吗?延期装货?除非您执行了(select all).ToList()。Where…是的,我认为linq to sql标记在本例中并不正确。