2011-01-15 1 views
0

Хорошо в этом случае, если, если я принести все записи сразу от этого запросаasp.net MVC Linq собирается через 1 миллиона записей (время proccess)

var pages=_db.Pages; 

, а затем я буду обрабатывать согласно некоторому сценарию

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

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

Действительно ли это экономит время на обработку? или нет (что на самом деле делать?)

ответ

3

Это важно знать, что это почти наверняка делает не принести «все записи сразу»:

var pages = _db.Pages; 

Предполагая, что это LINQ к SQL или что-то подобное , это просто создает запрос - он фактически ничего не извлекает из базы данных.

Когда вы используете pages.Where(...), который создает новый запрос - он фактически ничего не извлекает из базы данных, пока вы не начнете читать из запроса (например, вызывая ToList). Таким образом, очень сложно сказать, как помочь вам оптимизировать ваш код - мы не знаем, что вы делаете.

Вы пытаетесь что-либо сделать с всеми страницами или только с подмножеством? Если вы пытаетесь создать группу по PostStatusId, я предлагаю вам сделать это явно, а не путем выбора множества фильтров.

+0

я делаю карты сайта – maztt

+0

@mazhar: это не * почти * достаточно информации, чтобы помочь нам дать вам совет. –

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 
Смежные вопросы