Сообщение Тормоза с запросом от 06.11.2023 13:46
Изменено 06.11.2023 13:56 merge
Тормоза с запросом
Есть вот такой код вполне обычный.
Стал метод сильно тормозить. Смотрю в профайлере и вижу что идет запрос без условий, а просто
и потом получается накладывается фильтр.
То есть причина тормоза понятна. Непонятно, почему фильтр не накладывается? я думал, что до ToList\ToArray запрос собирается для базы. А получается что нет
Стал метод сильно тормозить. Смотрю в профайлере и вижу что идет запрос без условий, а просто
SELECT * FROM Cars
и потом получается накладывается фильтр.
То есть причина тормоза понятна. Непонятно, почему фильтр не накладывается? я думал, что до ToList\ToArray запрос собирается для базы. А получается что нет
class DbContext
{
DbSet<Car> Cars { get; set; }
}
somefunction()
{
Client client = GetClient();
bool CarSelectorDatabase(Car car) => client.Type switch
{
Type.Common => CarSelectorCommon(car),
Type.Legal => CarSelectorLegal(car),
_ => throw new ArgumentOutOfRangeException()
};
bool CarSelectorCommon(Car car) => client.IsVip()
? car.Country == client.Country &&
car.Model == client.Model &&
car.SomeProperty = ClientCertificateOption.SomeProperty
: car.Country == client.Country &&
car.Model == client.Model;
bool CarSelectorLegal(Car car) =>
car.Country == client.Country &&
car.Model == client.Model &&
car.LegalZip == Client.LegalZip;
var realCar = dbContext.Cars.FirstOrDefault(CarSelectorDatabase).ToList();
}
Тормоза с запросом
Есть вот такой код вполне обычный.
Стал метод сильно тормозить. Смотрю в профайлере и вижу что идет запрос без условий, а просто
и потом получается накладывается фильтр.
То есть причина тормоза понятна. Непонятно, почему фильтр не накладывается? я думал, что до ToList\ToArray запрос собирается для базы.
И что самое интересное если сделать простой switch то работает всё шустро и в разы быстрее.
то есть просто такой код делаем
Стал метод сильно тормозить. Смотрю в профайлере и вижу что идет запрос без условий, а просто
SELECT * FROM Cars
и потом получается накладывается фильтр.
То есть причина тормоза понятна. Непонятно, почему фильтр не накладывается? я думал, что до ToList\ToArray запрос собирается для базы.
код | |
| |
И что самое интересное если сделать простой switch то работает всё шустро и в разы быстрее.
то есть просто такой код делаем
var realCar = client.Type switch
{
Common => dbContext.Cars.FirstOrDefault(car => car.Country == client.Country &&
car.Model == client.Model &&
car.SomeProperty = Client.SomeProperty),
Legal => ...
}