Home > Software engineering >  How to write just one query to divide result from 2 query?
How to write just one query to divide result from 2 query?

Time:09-29

I have a query in Entity Framework Core like below:

var currencyRate = await AsyncExecuter.FirstOrDefaultAsync(
                    from exchangeRate in await _exchangeRateRepository.GetQueryableAsync()
                    where exchangeRate.CurrencyId == input.SelectedCurrencyId &&
                          exchangeRate.FirmId == input.FirmId &&
                          (exchangeRate.BeginDate <= input.ProcessDate && exchangeRate.EndDate >= input.ProcessDate)
                    select exchangeRate.CurrencyRate);

currencyRate = currencyRate / (await AsyncExecuter.FirstOrDefaultAsync(
                    from exchangeRate in await _exchangeRateRepository.GetQueryableAsync()
                    where exchangeRate.CurrencyId == input.CurrencyId &&
                          exchangeRate.FirmId == input.FirmId &&
                          (exchangeRate.BeginDate <= input.ProcessDate && exchangeRate.EndDate >= input.ProcessDate)
                    select exchangeRate.CurrencyRate));

I am dividing one currencyRate to another from 2 queries. There are 2 select queries. Only difference between queries is where condition. How to do this in one select query?

CodePudding user response:

Pull both rows with

where (exchangeRate.CurrencyId == input.CurrencyId || exchangeRate.CurrencyId == input.SelectedCurrencyId) 

Put an explicit order by on like

order by exchangeRate.CurrencyId == input.CurrencyId ? 0 : 1

Now you know the two rows you get back are in (currencyid, selectedcurrencyid) order so you can eg ToArray them and do array[1] / array[0]

  • Related