c# - IQueryable 对两个唯一 id 匹配的金额求和 C#

标签 c# mysql linq

我有一个正在查询的表。每笔付款都有一个总数和一个代表费用的负数。目前,我的查询提取了所需的查询,没有负数。

根据我最近所做的更改,我需要的不仅仅是选择正数,而是将正数和负数添加到单个表中与 batchId 匹配的位置。

我已经研究了几个小时,我尝试过的所有方法最终都对查询中的所有内容进行了总结,而不仅仅是批处理 ID 匹配的负数和正数。

请帮忙。下面是我的查询,它是我想要求和的金额列。

左边是示例数据,右边是我想要的

batchId Amount      batchId Amount
1       2.23        1       1.00
1      -1.23        2       3.00
2       5.43m       3       4.00
2      -2.43
3       6.60
3      -3.60

IQueryable<BatchPayment> query = _db
                .BatchPayments
                .Where(
                    bp => ValidBatchStatuesIds.Contains(bp.Batch.BatchStatusId)
                        && (!OnlineBatchTypes.Contains(bp.Batch.BatchTypeId)
                            || (OnlineBatchTypes.Contains(bp.Batch.BatchTypeId) && bp.Amount > 0.00m))
                );

最佳答案

尝试一下(为了正确验证,我将跳过不相关的条件):

var result = _db.BatchPayments
                 .GroupBy(p=> p.BatchId)
                 .Select(p=> new { BatchId = p.Key, Amount = p.Sum(q=> q.Amount)})
                 .ToList();
foreach (var batch in result)
{
    Console.WriteLine("BatchId = {0} Amount={1}", batch.BatchId, batch.Amount);
}

关于c# - IQueryable 对两个唯一 id 匹配的金额求和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41913228/

相关文章:

c# - asp,net 使用 site.master 页面

mysql - 返回具有最大值的单行

MySQL,以 mm 为单位显示秒 :ss format

f# - F#列表选择很多

c# - 动态 LINQ 强制转换为可为 null

c# - 将文件 bin\EntityFramework.SqlServer.xml 复制到 ..\bin\EntityFramework.SqlServer.xml 时出错失败

c# - 创建 BitmapImage 并为其应用特定的 Color

c# - 为什么.net 2.0 比 4.0 快

php - 从多个表中获取每个用户的最后记录时出现 SQL 语法错误,也没有得到输出

c# - LINQ C# 复杂的嵌套结构