【问题标题】:How to write just one query to divide result from 2 query?如何只编写一个查询来将结果与 2 个查询分开?
【发布时间】: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 =&gt; x.CurrencyId, x =&gt; x.CurrentcyRate) 交换以简化每个值的定位。

标签: c# sql tsql asp.net-core entity-framework-core


【解决方案1】:

拉动两行
where (exchangeRate.CurrencyId == input.CurrencyId || exchangeRate.CurrencyId == input.SelectedCurrencyId) 

按点赞排序

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2015-03-16
    • 2022-10-04
    相关资源
    最近更新 更多