我正在根据同一列的条件计算记录总数,基本上,这就是我现在所拥有的:
var checkTotal = await _dbRO.AllOpenExceptions
.Where(x => x.ClientId == _user.ClientId)
.CountAsync(x => x.ExceptionType == "Check");
var achTotal = await _dbRO.AllOpenExceptions
.Where(x => x.ClientId == _user.ClientId)
.CountAsync(x => x.ExceptionType == "ACH");
如您所见,我只需要计算 ExceptionType 列是“Check”与“ACH”的记录数。有没有办法将这两个单独的查询合并为一个查询?
我尝试过使用 select 进行分组,但无法弄清楚确切的语法。感谢您的帮助!
我们可以使用clientId和ExceptionType对数据进行分组和过滤,然后将其转换为字典:
var totals = await _dbRO.AllOpenExceptions
.Where(x => x.ClientId == clientId && (x.ExceptionType == "ACH" || x.ExceptionType == "Check"))
.GroupBy(x => new { x.ClientId, x.ExceptionType })
.ToDictionaryAsync(
key => key.Key.ExceptionType,
value => value.Count(),
cancellationToken);
如果您没有取消令牌,请将其删除。现在您可以通过按键 ACH 或 Check 访问您的总计。
var achTotal = totals["ACH"];
var checkTotal = totals["Check"];
更进一步并避免一些异常,您甚至可以使用 TryGetValue 方法:
totals.TryGetValue("ACH", out var achTotal);
totals.TryGetValue("Check", out var checkTotal);