在这种情况下,如果我从此查询中一次带来所有记录
,那就好了var pages=_db.Pages;
然后我会按照某种情况处理
pages.Where(m => m.int_PostStatusId == 2)
pages.Where(m => m.int_PostStatusId == 3) and so on
真的可以节省一些处理时间吗?或不(真正要做什么?)
答案 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