代码之家  ›  专栏  ›  技术社区  ›  chuckd

如何在EF Core中将这两个求和值的调用作为一个调用来运行?

  •  1
  • chuckd  · 技术社区  · 2 年前

    有办法打这两个电话吗?两者都来自同一个表,只是值不同。

    var grossAmount = await _dbContext.StripeTransfers
      .Where(p => p.StripePayoutId == payout.StripePayoutId)
      .Select(p => p.GrossAmount)
    .SumAsync();
    
    var totalTokens = await _dbContext.StripeTransfers
      .Where(p => p.StripePayoutId == payout.StripePayoutId)
      .Select(p => p.Tokens)
    .SumAsync();
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   mathis1337    2 年前

    正如评论中所建议的那样,在这里生成SQL语句可能更有效,但如果您想停留在EF和LINQ领域,您可以这样做:

    var result = await _dbContext.StripeTransfers
        .Where(p => p.StripePayoutId == payout.StripePayoutId)
        .GroupBy(p => p.StripePayoutId)
        .Select(g => new
        {
            GrossAmountSum = g.Sum(p => p.GrossAmount),
            TokensSum = g.Sum(p => p.Tokens)
        })
        .FirstOrDefaultAsync();
    
    // Here you can do whatever you want with variables.
    var grossAmount = result?.GrossAmountSum ?? 0;
    var totalTokens = result?.TokensSum ?? 0;
    
    推荐文章