Информация об изменениях

Сообщение Re[2]: Тормоза с запросом от 08.11.2023 1:21

Изменено 08.11.2023 3:00 IT

Re[2]: Тормоза с запросом
Здравствуйте, Sinclair, Вы писали:

S>То есть, ваш код можно было бы починить примерно так:


Можно проще и без заморочек типами:

public Car somefunction()
{
    var client = GetClient();
    var cars   = dbContext.Cars;

    cars = (client.Type, client.IsVip()) switch
    {
        (Type.Common, true)  => cars.Where(car =>
            car.Country == client.Country &&        
            car.Model   == client.Model &&
            car.SomeProperty == Client.SomeProperty),

        (Type.Common, false) => cars.Where(car =>
            car.Country == client.Country &&
            car.Model   == client.Model),

        (Type.Legal, _)      => cars.Where(car =>
            car.Country  == client.Country &&
            car.Model    == client.Model && 
            car.LegalZip == Client.LegalZip),

        _ => throw new ArgumentOutOfRangeException()
    }

    return cars.FirstOrDefault()
}


А если не предполагается больше никаких фильтров, то ещё короче:

public Car somefunction()
{
    var client = GetClient();
    var cars   = dbContext.Cars.Where(car =>
        car.Country == client.Country &&
        car.Model   == client.Model);

    cars = (client.Type, client.IsVip()) switch
    {
        (Type.Common, true)  => cars.Where(car =>
            car.SomeProperty == Client.SomeProperty),

        (Type.Common, false) => cars,

        (Type.Legal, _)      => cars.Where(car =>
            car.LegalZip == Client.LegalZip),

        _ => throw new ArgumentOutOfRangeException()
    }

    return cars.FirstOrDefault()
}
Re[2]: Тормоза с запросом
Здравствуйте, Sinclair, Вы писали:

S>То есть, ваш код можно было бы починить примерно так:


Можно проще и без заморочек с типами:

public Car somefunction()
{
    var client = GetClient();
    var cars   = dbContext.Cars;

    cars = (client.Type, client.IsVip()) switch
    {
        (Type.Common, true)  => cars.Where(car =>
            car.Country == client.Country &&        
            car.Model   == client.Model &&
            car.SomeProperty == Client.SomeProperty),

        (Type.Common, false) => cars.Where(car =>
            car.Country == client.Country &&
            car.Model   == client.Model),

        (Type.Legal, _)      => cars.Where(car =>
            car.Country  == client.Country &&
            car.Model    == client.Model && 
            car.LegalZip == Client.LegalZip),

        _ => throw new ArgumentOutOfRangeException()
    }

    return cars.FirstOrDefault()
}


А если не предполагается больше никаких фильтров, то ещё короче:

public Car somefunction()
{
    var client = GetClient();
    var cars   = dbContext.Cars.Where(car =>
        car.Country == client.Country &&
        car.Model   == client.Model);

    cars = (client.Type, client.IsVip()) switch
    {
        (Type.Common, true)  => cars.Where(car => car.SomeProperty == Client.SomeProperty),
        (Type.Common, false) => cars,
        (Type.Legal, _)      => cars.Where(car => car.LegalZip == Client.LegalZip),
        _ => throw new ArgumentOutOfRangeException()
    }

    return cars.FirstOrDefault()
}