asp.net mvc Linq经历了100万条记录(处理时间)

时间:2011-01-15 11:41:43

标签: asp.net-mvc linq

在这种情况下,如果我从此查询中一次带来所有记录

,那就好了
var pages=_db.Pages;

然后我会按照某种情况处理

pages.Where(m => m.int_PostStatusId == 2) 

pages.Where(m => m.int_PostStatusId == 3)  and so on

真的可以节省一些处理时间吗?或不(真正要做什么?)

2 个答案:

答案 0 :(得分:3)

重要的是要知道这几乎肯定一次带来“所有记录”:

var pages = _db.Pages;

假设这是LINQ to SQL或类似的东西,这只是创建一个查询 - 它实际上并不从数据库中提取任何内容。

当您使用pages.Where(...)创建新查询时 - 再次,它实际上不会从数据库中提取任何内容,直到您开始从查询中读取(例如,通过调用ToList)。因此,很难说如何帮助您优化代码 - 我们不知道您在做什么。

您是否尝试使用所有页面或仅使用子集执行任何操作?如果您正在通过PostStatusId尝试分组,我建议您明确地执行此操作,而不是使用大量不同的过滤器进行分组。

答案 1 :(得分:1)

假设pages是数据库感知的linq查询提供者,那么使用
最有效 方法是编写单个查询以获取所需的所有数据:

// Create the query
var pages = 
      _db.Pages.Where(p => p.int_PostStatusId >= 2 && p.int_PostStatusId <= 100);

// Execute the query
foreach(var page in pages)
    ProcessPage(page);

这会产生类似这样的SQL:

select *
from PAGE_TABLE
where PostStatusId >=2 and PostStatusId <= 100