首页 > 解决方案 > How to write just one query to divide result from 2 query?

问题描述

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?

标签: c#sqltsqlasp.net-coreentity-framework-core

解决方案


拉两行

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

把一个明确的顺序放在喜欢上

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

现在您知道返回的两行是 (currencyid, selectedcurrencyid) 顺序,因此您可以例如 ToArray 它们并执行array[1] / array[0]


推荐阅读