![](/img/trans.png)
[英]How do I create a dynamic where clause using a List in LINQ to SQL?
[英]Should I do the Where clause in SQL or in LINQ?
我有一个方法可以将where子句传递给查询。 然后,此方法返回一个DataSet。
什么是更快,更有效? 要传递where子句,以便SQL Server发回较少的数据(但必须做更多工作)或让Web服务器通过LINQ处理它?
编辑 :
这假设SQL Server比Web服务器更强大(可能应该是这种情况)。
您是否直接使用ADO.Net来执行数据访问? 如果是,那么是 - 在SQL中使用WHERE子句并限制发送回应用程序的数据量。
SQL Server在此方面很有效,您可以设计索引以帮助它访问数据,并将较少的数据传输回客户端应用程序。
想象一下,表中有20,000行,但您只对其中的100行感兴趣。 当然,仅从源中获取100行并将其发送回来更有效,而不是在Web应用程序中过滤掉的整个批次。
您已经标记了linq-to-sql,如果是这种情况,那么在LINQ语句中使用WHERE子句将在SQL Server上生成WHERE子句。
但总的经验法则是,只需获取您感兴趣的数据。通过线路获得的数据更少,查询通常运行得更快(只要通过索引进行优化等),而客户端应用程序的工作量就会减少,而且已经只获得了它感兴趣的数据。
事实上,SQL Server擅长过滤数据:这就是它的构建,所以总是要使用它。 如果你用C#过滤; 您将无法使用表中的任何索引。 它的效率会低得多。
选择所有行只是为了丢弃许多/大部分行是浪费,它肯定会在性能中显示出来。
如果您没有使用任何类型的
ORM
那么在数据库级别使用where
条件,因为我认为过滤应该在数据库级别进行。
但是,如果您使用任何ORM(如Entity Framework
或Linq to SQL
那么从性能的角度来看,它与您的Linq
Where
子句相同,最终将转换为SQL
Where
子句,直到您在IQuerable
上使用where
子句。
从效率的角度来看,它应该是SQL服务器。 如果它不需要多个数据库调用,那么使用SQL服务器总是更好的解决方案。 但是,如果您已经拥有数据库中的数据集,则可以使用LINQ对其进行过滤
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.