如何在MVC中使用LINQ处理大量数据

时间:2018-07-13 04:11:04

标签: linq

使用linq查询时遇到问题。我正在使用此查询和date time参数从SQL数据库获取数据(请参见下文)。执行此查询时,需要花费很长时间,并且经过长时间的等待后,我得到一个错误。

数据在数据库中可用,当我将Take()用于行数时,它将起作用。我不知道如何解决问题。

我的查询是否有可能命中大量数据,导致查询无法正常工作?您能否分享有关解决此问题的建议?

from ClassificationData in DbSet
where ClassificationData.CameraListId == id && 
      ClassificationData.DateTime <= endDate && 
      ClassificationData.DateTime >= startdate
orderby ClassificationData.Id descending
select ClassificationData

1 个答案:

答案 0 :(得分:0)

您的问题可能是在SQL领域而不是LINQ上。 LINQ只是将您编写的内容转换为Transact-SQL(T-SQL),然后将其发送到SQL Server。如果您的SQL Server设置不正确,则查询时间过长将导致超时。

您需要确保在CategoryData表上具有索引(我假设它是一个表,但是它可能是一个视图-不管是什么,如果它有很多行,都需要在其上放置索引)。确保索引位于DateTime上,并且索引也位于CameraListId上。然后,降低数据的无序性,并在本地计算机上执行一个单独的查询来执行排序,这将使SQL Server立即开始为您提供数据,而不是先对其进行排序,从而减少了超时的可能性。

如果问题仍然存在,请直接针对SQL Server编写查询(例如,在查询分析器中,如果它们仍然使用-我是老派,但是有点生锈)。一旦使SQL Server实际工作,那么您应该能够编写可转换为该SQL的LINQ。但是您也可以使其成为存储过程,这还有其他好处,但这又是另一回事了。

最后,如果仍然有太多数据,可以通过CameraListId将数据分解为多个表,或者一次数据一次将数据分解为多个表,因此查询的DateTime部分没有那么多的内容可以浏览。

祝你好运。