Я сделал несколько поисков, и я все еще борюсь с этим. Я хочу выполнить этот запрос на ядре EF, используя sql server Exists ():
Проблема в том, что в sql server выполнение приведенного ниже запроса занимает около 2 секунд. А на C # с использованием метода Any () это занимает более 1 минуты. Он делает несколько запросов к таблицам HutOperationHistory и HutPropertyValue.
// занимает 1-2 секунды
select * From Hut h where exists(
select 1 from HutOperationHistory
where HutId = h.HutId and HutOperationId = 4
)
and exists(
select 1 from HutPropertyValue
where HutId = h.HutId and Value = 'HUT_SUPPLIER_PROPERTY_NAME'
)
and exists(
select 1 from HutPropertyValue
where HutId = h.HutId and Value = 'BUY_ORDER_PROPERTY_NAME'
)
and exists(
select 1 from HutPropertyValue
where HutId = h.HutId
and Value = 'WORK_ORDER_PROPERTY_NAME'
)
Я сделал это на linq, и это выглядит так:
// takes more then 1 minute
var huts = coreDbContext.Huts
.Include(x => x.PropertyValuesList).ThenInclude(y => y.HutProperty)
.Include(x => x.OperationHistoriesList)
.Where(
x =>
x.OperationHistoriesList.Any(
z => ( z.HutOperation.hutOperationId = 4 )
)
&& x.PropertyValuesList.Any(b =>
b.Value.Equals(hutSupplierPropName, StringComparison.CurrentCultureIgnoreCase)
)
&& x.PropertyValuesList.Any(b =>
b.Value.Equals(buyOrderPropName, StringComparison.CurrentCultureIgnoreCase)
)
&& x.PropertyValuesList.Any(b =>
b.Value.Equals(workOrderPropName, StringComparison.CurrentCultureIgnoreCase)
)
)
.OrderBy(x => x.Order)
.ToList();
Есть ли что-нибудь, что я могу сделать, чтобы сделать это быстрее?
Спасибо заранее!