c# linq 两个list相同id合并,不同相加
时间: 2023-10-29 12:05:48 浏览: 52
可以使用 LINQ 的 GroupBy 和 Select 方法来实现。
假设有两个 List,分别为 list1 和 list2,每个对象包含一个 id 和一个 value 属性,代码如下:
```csharp
class Item
{
public int id { get; set; }
public int value { get; set; }
}
List<Item> list1 = new List<Item>()
{
new Item() { id = 1, value = 10 },
new Item() { id = 2, value = 20 },
new Item() { id = 3, value = 30 }
};
List<Item> list2 = new List<Item>()
{
new Item() { id = 1, value = 20 },
new Item() { id = 2, value = 30 },
new Item() { id = 4, value = 40 }
};
```
要实现的功能是将两个 List 合并,如果 id 相同,则将 value 相加,否则将两个对象合并成一个新的对象。
代码如下:
```csharp
var result = list1.Concat(list2)
.GroupBy(item => item.id)
.Select(group =>
{
var item = new Item() { id = group.Key };
item.value = group.Sum(g => g.value);
return item;
})
.ToList();
```
首先使用 Concat 方法将两个 List 合并成一个,然后使用 GroupBy 方法按照 id 进行分组,最后使用 Select 方法将每个分组的对象转换成一个新的 Item 对象,其中 value 属性为该分组中所有对象的 value 属性之和。
最终得到的 result 就是合并后的 List,输出结果如下:
```
id: 1, value: 30
id: 2, value: 50
id: 3, value: 30
id: 4, value: 40
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)