Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该在SQL中还是在LINQ中执行Where子句?_C#_Asp.net_Linq - Fatal编程技术网

C# 我应该在SQL中还是在LINQ中执行Where子句?

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

我有一个方法可以将where子句传递给查询。然后,该方法返回一个数据集

什么更快更高效?要通过where子句使SQL Server发送回更少的数据(但必须做更多的工作),还是让web服务器通过LINQ处理它

编辑

这是假设SQL Server比web服务器更强大(可能应该是这样)

如果未使用任何类型的
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标记在本例中并不正确。