C# 在列表中合并重复项
在我当前的测试项目中,我希望将所有对象合并到一个列表中,其中一个对象的值与另一个对象中的值相同,然后我希望检查这些对象下的其他值,并将它们合并在一起,如下示例:C# 在列表中合并重复项,c#,list,linq,C#,List,Linq,在我当前的测试项目中,我希望将所有对象合并到一个列表中,其中一个对象的值与另一个对象中的值相同,然后我希望检查这些对象下的其他值,并将它们合并在一起,如下示例: 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, pr
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
}
根据上述Object1和Object3,将根据它们的相关“id”值进行组合,然后将它们的价格进行组合,并将导致以下对象替换列表中的Object1和Object3:
NewObject
{
id = 111,
price1 = 40,
price 2 = 90
}
最终列表将如下所示:
NewObject
{
id = 111,
price1 = 40,
price 2 = 90
}
Object2
{
id = 222,
price1 = 10,
price 2 = 20
}
Object4
{
id = 444,
price1 = 15,
price 2 = 25
}
到目前为止,我将使用linq获取值,如下所示:
var result = source
.GroupBy(x => x.id,
(key, values) => new {
id = key,
price1 = values.Sum(x => x.price1),
price2 = values.Sum(x => x.price2)
});
var combined = list.GroupBy(x => x.id, x => x).Select(x => new ListObj()
{
id = x.Key,
price1 = x.Sum(s => s.price1),
price2 = x.Sum(s => s.price2),
});
整个控制台应用程序:
class Program
{
static void Main(string[] args)
{
var list = new List<ListObj>()
{
new ListObj()
{
id = 111,
price1 = 10,
price2 = 20
},
new ListObj()
{
id = 222,
price1 = 10,
price2 = 20
},
new ListObj()
{
id = 111,
price1 = 30,
price2 = 70
},
new ListObj()
{
id = 444,
price1 = 15,
price2 = 25
},
};
var combined = list
.GroupBy(x => x.id, x => x)
.Select(x => new ListObj()
{
id = x.Key,
price1 = x.Sum(s => s.price1),
price2 = x.Sum(s => s.price2),
});
Console.ReadKey();
}
}
public class ListObj
{
public int id { get; set; }
public int price1 { get; set; }
public int price2 { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
var list=新列表()
{
新ListObj()
{
id=111,
价格1=10,
价格2=20
},
新ListObj()
{
id=222,
价格1=10,
价格2=20
},
新ListObj()
{
id=111,
价格1=30,
价格2=70
},
新ListObj()
{
id=444,
价格1=15,
价格2=25
},
};
var组合=列表
.GroupBy(x=>x.id,x=>x)
.Select(x=>newlistobj()
{
id=x.键,
价格1=x.Sum(s=>s.price1),
价格2=x.Sum(s=>s.price2),
});
Console.ReadKey();
}
}
公共类ListObj
{
公共int id{get;set;}
public int price1{get;set;}
公共整数价格2{get;set;}
}
尝试分组方式
var combined = list.GroupBy(x => x.id, x => x).Select(x => new ListObj()
{
id = x.Key,
price1 = x.Sum(s => s.price1),
price2 = x.Sum(s => s.price2),
});
整个控制台应用程序:
class Program
{
static void Main(string[] args)
{
var list = new List<ListObj>()
{
new ListObj()
{
id = 111,
price1 = 10,
price2 = 20
},
new ListObj()
{
id = 222,
price1 = 10,
price2 = 20
},
new ListObj()
{
id = 111,
price1 = 30,
price2 = 70
},
new ListObj()
{
id = 444,
price1 = 15,
price2 = 25
},
};
var combined = list
.GroupBy(x => x.id, x => x)
.Select(x => new ListObj()
{
id = x.Key,
price1 = x.Sum(s => s.price1),
price2 = x.Sum(s => s.price2),
});
Console.ReadKey();
}
}
public class ListObj
{
public int id { get; set; }
public int price1 { get; set; }
public int price2 { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
var list=新列表()
{
新ListObj()
{
id=111,
价格1=10,
价格2=20
},
新ListObj()
{
id=222,
价格1=10,
价格2=20
},
新ListObj()
{
id=111,
价格1=30,
价格2=70
},
新ListObj()
{
id=444,
价格1=15,
价格2=25
},
};
var组合=列表
.GroupBy(x=>x.id,x=>x)
.Select(x=>newlistobj()
{
id=x.键,
价格1=x.Sum(s=>s.price1),
价格2=x.Sum(s=>s.price2),
});
Console.ReadKey();
}
}
公共类ListObj
{
公共int id{get;set;}
public int price1{get;set;}
公共整数价格2{get;set;}
}
您需要根据id进行分组。请参阅msdn示例:您需要根据id进行分组。请参阅msdn示例:好的解决方案,可能是一些解释性的句子有助于OP掌握其背后的思路。:)很好的解决办法,可能是用几个解释性的句子来帮助OP抓住它背后的思路。:)