Я хочу создать функцию, которая изменяет поиск на основе серии значений bool, считанных из базы данных.Очень плохой вариант изменения производительности
Я пытался принимать такой подход, как это:
IEnumerable<RootDomain> lookup = db.RootDomains;
//bools are nullable
if (conditions.HasCompanyMatch == true) lookup = lookup.Where(x => x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasCompanyMatch == false) lookup = lookup.Where(x => !x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasEmail == true) lookup = lookup.Where(x => x.EmailMessages.Count() > 1);
// etc.. more bool switches
//very slow when it enumerated in any way
var count = lookup.Count();
Это работает, но это очень медленно. Когда перечисляемый поиск перечисляется, использование ram использует до 800 Мбайт, и это занимает несколько минут, тогда как если я делаю все это за один шаг, это занимает всего несколько секунд, а ram - как 60mb.
Я предполагаю, что делать это так, это добавление некоторых рекурсивных запросов или что-то, но я не уверен.
Каков правильный путь для достижения этой цели без разрушения производительности?
«, а если я все это в одном шаге он принимает всего несколько секунд "- можете ли вы показать код, который вы использовали, когда вы это сделали? –
Я имею в виду делать это как 'lookup = db.RoodDomains.Where (...) .Where (...) .Where (...)' в одно время без каких-либо операторов if. – Guerrilla
Предполагая, что это SQL-сервер, исследовали ли вы с помощью инструментов профилирования, чтобы узнать, что генерируется SQL? –