Я думаю, из вашего кода здесь:
ServiceDetail checkservicedetailid = ServiceDetails_worker.get(
a => a.ServiceName == ServiceName &&
a.MarginAnalysisID == checkmarginanalysisid().MarginAnalysisID
).SingleOrDefault();
что .get()
принимает Func<SomeType, bool>
, а вы делаете что-то вроде:
var row = dbCtx.SomeTable.Where(predicate);
(пожалуйста, поправьте меня здесь, если я ошибаюсь)
Это, однако, использует LINQ-to-Objects, что означает: он загружает каждую строку из таблицы в клиент и тестирует локально. Это повредит памяти, особенно если для каждой строки создается отдельный контекст БД. Кроме того, вызов checkmarginanalysisid()
выполняется для каждой строки, когда он предположительно не меняется между строками.
Вы должны проверить это с Expression<Func<SomeType, bool>>
, который будет переведен на TSQL и выполнен на сервере. Вам также может понадобиться удалить непереводимые методы, т.е.
var marginAnalysisId = checkmarginanalysisid().MarginAnalysisID;
ServiceDetail checkservicedetailid = ServiceDetails_worker.get(
a => a.ServiceName == ServiceName &&
a.MarginAnalysisID == marginAnalysisId
).SingleOrDefault();
где это get(Expression<Func<SomeType, bool>>)
.