Как избежать слишком большого количества (JOINS, SELECT, WHERE) для повышения производительности entity framework ?
привет,
я использую следующие коды для сравнения склад с неснижаемый остаток и получить то, что нет. недостающих предметов как:
int Shortages_StockNoSer = nDB01.stock_noserials .GroupBy(x => x.stitems_ID) .Select(grp => new { itemID = grp.Key, sum = grp.Sum(x => x.StockQnty), min = grp.Select(s => s.st_items.stitems_MinBalance).FirstOrDefault() }).Where(u => u.sum < u.min && u.min != 0) .Count(); int Shortages_StockWithSer = nDB01.purchases_item_seriels .GroupBy(x => x.stitems_ID) .Select(grp => new { itemID = grp.Key, sum = grp.Count(), min = grp.Select(s => s.st_items.stitems_MinBalance).FirstOrDefault() }).Where(u => u.sum < u.min && u.min != 0) .Count(); int CountShortagesItems = Convert.ToInt32( Shortages_StockNoSer) + Convert.ToInt32(Shortages_StockWithSer);
также это мой код, чтобы получить нет клиентов, чьи балансы превысили кредитный лимит :
int CustomersBalances_StockNoSer = nDB01.people_data .GroupBy(x => x.pepole_ID) .Select(grp => new { itemID = grp.Key, balance = nDB01.account_items.Where(u => (u.account_main.accitem_PeplID == grp.Key && u.accitem_AccID == 10) || (u.account_main.accitem_PeplID == grp.Key && u.accitem_AccID == 59)).FirstOrDefault().accitem_Debit - nDB01.account_items.Where(u => (u.account_main.accitem_PeplID == grp.Key && u.accitem_AccID == 10) || (u.account_main.accitem_PeplID == grp.Key && u.accitem_AccID == 59)).FirstOrDefault().accitem_Credit, Limited = grp.Select(s => s.pepole_CreditLimit).FirstOrDefault() }).Where(u => (u.balance) > u.Limited ) .Count();
Что я уже пробовал:
я проверил этот код с помощью Профилировщик Entity Framework и получите это предупреждение :
Первый код оповещения :
СЛИШКОМ МНОГО ВЛОЖЕННЫХ ОПЕРАТОРОВ SELECT
Второй Код Оповещения :
СЛИШКОМ МНОГО ВЛОЖЕННЫХ ОПЕРАТОРОВ SELECT
СЛИШКОМ МНОГО ПРЕДЛОЖЕНИЙ WHERE В ЗАЯВЛЕНИИ
ИЗБЕГАЙТЕ СЛИШКОМ БОЛЬШОГО КОЛИЧЕСТВА СОЕДИНЕНИЙ
Могу ли я что-нибудь сделать с этим?