c# - 如何使用 LINQ 添加两条记录?

标签 c# .net linq list record

我需要帮助解决我遇到的问题。我有一个包含多个字段的列表,包括契约(Contract)、分期付款和金额。

我需要根据这些字段创建一个新列表,当然包括所有其他字段。

因此,对于每份包含两期付款的契约(Contract),我需要将金额加总到第一期,同时保留第二期。

你有下面的例子。

这可能吗?

...contract    instalment    amount ...
...1           1             100    ... 
...1           2             1000   ...
...2           1             100    ...
...3           1             1000   ...
...4           1             200    ...
...4           2             100    ...
...5           1             1000   ...

...contract    instalment    amount ...
...1           1             1100   ... 
...1           2             1000   ...
...2           1             100    ...
...3           1             1000   ...
...4           1             300    ...
...4           2             100    ...
...5           1             1000   ...

最佳答案

我想你想要:

var result = from record in records
             group record by record.Contract into contractGroup
             let orderedGroup = contractGroup.OrderBy(r => r.Instalment).ToList()
             let aggregatedItem = new Record 
                                  {
                                      Contract = contractGroup.Key,
                                      Instalment = orderedGroup.First().Instalment,
                                      Amount = orderedGroup.Sum(r => r.Amount) 
                                  }
             from resultRecord in new[] { aggregatedItem }
                                        .Concat(orderedGroup.Skip(1))              
             select resultRecord;

请注意,在您的示例中,您只处理组包含一个或两个项目的情况,但上述代码也适用于组中的三个或更多项目,方法是将第一个项目与所有其他项目聚合。

编辑:

由于您想改变每个组中的第一条记录而不是创建一个新记录,我会这样做:

foreach(var contractGroup in records.GroupBy(record => record.Contract))
{
     // Use Aggregate or a dedicated MinBy operator
     // if you don't want the sorting overhead.
     var aggregateItem = contractGroup.OrderBy(record => record.Instalment)
                                      .First();     

     aggregateItem.Amount = contractGroup.Sum(record => record.Amount);  
}

// Now use 'records' as before as the subsequent data-source.

关于c# - 如何使用 LINQ 添加两条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12037426/

相关文章:

c# - &运算符的含义是什么?

c# - 在 Visual Studio 中,是否可以将 .NET 4.x CLR 作为 2.0 类库 API 的目标?

c# - 事件日志中未显示自定义事件

c# - Web Api 中的 OData 路由

.net - F#中的异步等待

java - 构建供多个平台使用的 Web 服务 - 我应该使用什么格式?

c# - 将 byte[] 数组的一部分复制到 PDFReader

c# - NServiceBus 中的 AoP 支持?

c# - 将 foreach 与 LINQ to Entities 一起使用时是否需要 ToList

c# - 检查列表中的所有值是否相等