[C#将多个ObjectList合并为一个

问题描述 投票:0回答:1

我有一个这样的对象列表:

using System;
using System.Collections.Generic;
using System.Linq;

public class Item
{
    public int Id;
    public int Price;
}

public class Program
{
    public static void Main()
    {
        List<Item> food = new List<Item> {
            new Item { Id = 1, Price = 1},
            new Item { Id = 2, Price = 3},
            new Item { Id = 4, Price = 9}
        };

        List<Item> drinks = new List<Item> {
            new Item { Id = 1, Price = 1},
            new Item { Id = 2, Price = 2},
            new Item { Id = 3, Price = 0},
            new Item { Id = 4, Price = 1},
            new Item { Id = 6, Price = 1}
        };

        List<Item> magazines = new List<Item> {
            new Item { Id = 3, Price = 1},
            new Item { Id = 5, Price = 2},
        };

        var combined = food.Union(drinks).Union(magazines).Distinct().ToList();
    }
}

我想做的是,将所有价格添加到一个列表中。没有任何重复(Id)。我的目标是获得价格的总和。因此,基本上将同一ID的所有价格加在一起。

所以合并的列表应如下所示:

List<Item> combined = new List<Item> {
            new Item { Id = 1, Price = 2},
            new Item { Id = 2, Price = 5},
            new Item { Id = 3, Price = 1},
            new Item { Id = 4, Price = 10},
            new Item { Id = 5, Price = 2},
            new Item { Id = 6, Price = 1}
        };

最好使用LINQ。

c# .net
1个回答
1
投票

如果需要获取结果Item清单的价格总和,则应使用GroupBy GroupBy方法进行处理>>

Linq

您还可以添加var combined = food.Union(drinks).Union(magazines).GroupBy(i => i.Id, i => i.Price, (i, prices) => new Item() {Id = i, Price = prices.Sum()}).OrderBy(i => i.Id).ToList(); 以按OrderBy属性对结果进行排序


0
投票
OrderBy
© www.soinside.com 2019 - 2024. All rights reserved.