【发布时间】:2021-09-29 06:54:59
【问题描述】:
我在 Entity Framework Core 中有一个查询,如下所示:
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));
我将 2 个查询中的一种货币汇率划分为另一种。有 2 个选择查询。查询之间的唯一区别是 where 条件。如何在一个选择查询中做到这一点?
【问题讨论】:
-
有订单吗?还是只有一个数据库行?
-
不,没有order by。对于每个查询,只有数据库行
-
那么您肯定可以使用
where (exchangeRate.CurrencyId == input.CurrencyId || exchangeRate.CurrencyId == input.SelectedCurrencyId) .... .ToListAsync()获得两行。 -
使用 an 或
||,也选择货币 ID,以便您知道哪个是哪个,然后在客户端对两行进行排序.. 或使用 CurrencyId/SelectedCurrencyId 强制排序你知道哪个是第 1 行,哪个是第 2 行 -
通过选择然后再次定位每个 Id 值。或者您可以将
select ... .ToListAsync()与.ToDictionaryAsync(x => x.CurrencyId, x => x.CurrentcyRate)交换以简化每个值的定位。
标签: c# sql tsql asp.net-core entity-framework-core