c# - 合并来自具有相同 UserId 的 2 个不同列表的 2 行?
问题描述
如果我有 2 个不同的列表,
list1 包含:
用户 ID:fcec4d6c-c971-4690-90da-be8411dcf251 Col1:32 Col2:2 Col3:0 Col4:0
用户 ID:783ffaa5-03ef-4883-80d2-0500ef489832 Col1:50 Col2:4 Col3:0 Col4:0
list2 包含:
用户 ID:fcec4d6c-c971-4690-90da-be8411dcf251 Col1:0,Col2:0,Col3:45,Col4:50
如果我想将这些合并到列表中,那么结果将最终成为一个 UserDto 列表,其中包含: UserId: fcec4d6c-c971-4690-90da-be8411dcf251 Col1: 32 Col2: 2 Col3: 34 Col4: 50 UserId: 783ffaa5- 03ef-4883-80d2-0500ef489832 Col1:50 Col2:4 Col3:0 Col4:0
一个人会怎么做呢?
UserDto 只包含类似
[JsonSchema(JsonObjectType.String, Format = "uuid")]
public Guid UserId { get; set; }
public int Col1 { get; set; }
public int Col2 { get; set; }
public int Col3 { get; set; }
public int Col4 { get; set; }
我试过了
list1.AddRange(list2);
list1.GroupBy(e => e.UserId, (key, g) => new { User = key, Columns = g.ToList() }).ToList();
return list1;
list1 返回 2 个 UserId,其中 fcec4d6c-c971-4690-90da-be8411dcf251 现在有一个包含 2 列的 Columns 列表,其中一个填充了 col1 + col2 和 col3 + col4。请注意,这些列表将包含大量此类实例。
编辑1:我应该更清楚地表明我最终想要这些实例的总和。我现在已经收到了一个合适的解决方案。
解决方案
选择合适的聚合函数:
var result = list1.Concat(list2)
.GroupBy(e => e.UserId)
.Select(g => new User
{
UserId = g.Key,
Col1 = g.Max(x => x.Col1),
Col2 = g.Max(x => x.Col2),
Col3 = g.Max(x => x.Col3),
Col4 = g.Max(x => x.Col4),
})
.ToList();
推荐阅读
- html - 垂直居中自定义列表项目符号
- puppeteer - puppeteer:document.querySelector 适用于控制台但不适用于 puppppeteer
- matlab - 如何在MATLAB中循环求解非线性方程
- java - 如何更改spring mockmvc的http端口
- php - PHP中的正则表达式:从另一个字符串中检索特定字符串
- java - 解析字符串对象的名称(Java)
- elasticsearch - 弹性搜索中的通配符和模糊查询
- ionic-framework - 如何将地图与 Ionic 集成
- typescript - 如何重构简单的 for-await-of 循环?
- c - 使用 SUID 人为提升权限