目标:
如果有任何重复,例如如果“_name:a”,_quantity:3“和”_name:a“,_quantity:6”应合并为“_name:a”,_quantity:9“,则应合并为一个列表与其他数据重复与否。
问题: 我有一个包含大量数据的列表,我不知道如何将重复数据合并到一个单元中+它不应该影响其他单元。如果可能的话,希望在不创建更多列表的情况下将所有内容发生在相同的列表中以实现结果。
List<Sale> myList = GetAllSalesList()
public classs Sale
{
public string _name;
public string _quantity;
}
答案 0 :(得分:3)
这样的东西?
var mergedList =
myList.GroupBy(x => x._name)
.Select(g => new Sale{_name = g.Key, _quantity = g.Sum(x => x._quantity)})
.ToList();
修改强>
我刚刚注意到_quantity
是string
,这是正确的吗?
如果是,请使用Sum()
将代码段更改为:
g.Sum(x => int.Parse(x._quantity)).ToString()
当然_quantity
代表int
...否则请使用double
或decimal
等...
答案 1 :(得分:1)
您可以使用分组
来完成此操作var query = from sales in list
group sale by _name into grouped
select new Sale
{
_name = grouped.Key,
_quantity = grouped.Sum(x => x._quantity)
};
var groupedList = query.ToList();
有关分组的更多信息,请参阅101页中的实际示例 - http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
注意 - 这个答案假定_quantity实际上是一个int,并且整数溢出不是问题
答案 2 :(得分:0)
var aggregateList =
myList.GroupBy(i => i._name)
.Select(g => new Sale
{
_name = g.Key,
_quantity = g.Sum(x => Convert.ToInt64(x._quantity)).ToString()
})
.ToList();