合并列表中的重复项

Dan*_*all 2 c# linq list

在我当前的测试项目中,我希望将所有对象合并到一个列表中,其中一个值与另一个对象中的值相同,然后我想检查这些对象下的其他值并将它们组合在一起,如下示例:

Object1
{
id = 111,
price1 = 10,
price 2 = 20
}

Object2
{
id = 222,
price1 = 10,
price 2 = 20
}

Object3
{
id = 111,
price1 = 30,
price 2 = 70
}

Object4
{
id = 444,
price1 = 15,
price 2 = 25
}
Run Code Online (Sandbox Code Playgroud)

从上面的对象 1 和对象 3 将根据其相关的“id”值进行组合,然后将它们的价格组合起来,并会导致以下对象替换列表中的对象 1 和对象 3:

NewObject
{
id = 111,
price1 = 40,
price 2 = 90
}
Run Code Online (Sandbox Code Playgroud)

最终列表将如下所示:

NewObject
{
id = 111,
price1 = 40,
price 2 = 90
}

Object2
{
id = 222,
price1 = 10,
price 2 = 20
}

Object4
{
id = 444,
price1 = 15,
price 2 = 25
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我将使用 linq 获取该值,如下所示:

  1. 选择所有具有相同 id 的值并添加它们的值
  2. 使用步骤 1 中获得的所有值的组合创建新对象并将其添加到新列表中
  3. 继续列表,如果“id”已存在于新列表中,则忽略它,因为它已合并到新列表中

是否有一种使用单个 LINQ 语句更快更简单的方法?

Leo*_*hev 5

var result = source
.GroupBy(x => x.id,
         (key, values) => new {
            id = key,
            price1 = values.Sum(x => x.price1),
            price2 = values.Sum(x => x.price2)
         });
Run Code Online (Sandbox Code Playgroud)