.NET .ToList函数的方式太慢了

Tom*_*anc 4 sql linq vb.net entities linq-to-sql

我们在这里使用.ToList命令遇到了很多麻烦,它在VB.NET中用于MVC ASP.NET Web项目.

我们的数据库中有大约2000个条目,我们使用LINQ命令来SELECT和ORDER 2000条目.结果将通过.ToList方法转换为我们的寻呼机和网格构建器的列表.问题是,.ToList采用WAY WAY TOO long(我们说要执行40-60秒)所以我们的网站看起来很慢.

我们在数据库上测试了等效的SQL命令,它可以快速响应.这不是命令或慢速数据库服务器的问题.我们尝试了一个IEnumrable女巫很快,但我们需要在.ToList格式的最后为我们的网格.什么是.ToList的交易?我们能做什么?

这是代码:

 'list = (From c In _entities.XXXXXXXXSet.Include("XXXXXX").Include("XXXXXX") _
                Where Not (c.XXXXXX Is Nothing AndAlso c.XXXXXX = String.Empty) _
                And c.XXXXXX = codeClient _
                And c.XXXXXX > dateLimite _
                Order By c.XXXXXX Descending _
                Select c).ToList()
Run Code Online (Sandbox Code Playgroud)

我们划分了代码,只留下了.ToList函数,这真的是一直在吸收的东西.LINQ命令立即执行.

非常感谢.汤姆

Fem*_*ref 15

当然LINQ命令很快就会"执行",因为它只代表查询.只有在迭代它时才会执行查询,这正是ToList方法的作用.

我建议您使用寻呼机中的SkipTake运算符来缩小从数据库中查询的结果范围.这样做,您只需要10或20个元素或任何您需要的元素,从而获得更流畅的体验.


Fre*_*örk 8

我认为最好在查询中进行分页,而不是一次性获取所有数据,使用SkipTake.

list = (From c In _entities.XXXXXXXXSet.Include("XXXXXX").Include("XXXXXX") _
            Where Not (c.XXXXXX Is Nothing AndAlso c.XXXXXX = String.Empty) _
            And c.XXXXXX = codeClient _
            And c.XXXXXX > dateLimite _
            Order By c.XXXXXX Descending _
            Select c).Skip(pageSize * pageIndex).Take(pageSize).ToList();
Run Code Online (Sandbox Code Playgroud)

这与一些目标明确的缓存(如果可能)配对应该可以提供更快捷的用户体验.