我的IQueryable服务有以下LINQ查询
Dim eventcount = EventService.QueryEvents().Count
Dim eventlist = EventService.QueryEvents().Skip((page - 1) * 5).Take(5).ToList
但是我想知道是否有办法在不对数据库进行两次调用的情况下执行此操作?
答案 0 :(得分:1)
我在某个时候遇到了同样的问题,然后我想出了LINQ to SP =)。制作和SP并将其放入你的实体并使用它。您可以根据自己的需要编写Sp,例如拉动记录和总记录列。与您现在使用的相比,它更容易,更快速。
我去年遇到了同样的问题,然后当谈到性能时,我没有进行两次查询,而是转移到 LINQ to SP ,并创建了一个存储过程并通过实体调用它喜欢 LINQ 到存储过程=)。我的存储过程完成了所有操作,只返回了我想要的那些记录,并且我在存储过程结束时进行了分页,这样我一次获得的数据有限,而不是应用程序中的所有数据。
您可以制作和SP并将其放入您的实体并使用它。您可以根据需要编写Sp,例如将记录和总记录作为列。考虑拥有100个表的1000K记录。性能慢?您可以通过在数据库级别创建Sp并通过实体调用来实现 Linq to SQL 。它会比你试图达到的速度快得多=)
答案 1 :(得分:1)
我会考虑对计数实施2级缓存,小心获取缓存密钥以包含相关标准,并使其适当地失效。