【发布时间】:2018-06-16 21:09:22
【问题描述】:
我有一个List<Meb>(一个条形嵌套),每个嵌套内部都有一个详细信息列表。
所有这些条形图都是唯一的,因为其中的每个元素的 ID 都是唯一的。
现在我想添加一个复选框,以便对内部具有相同详细信息列表的所有条进行分组或不分组(里面的项目列表是相同的,除了它们的 ID 和一些我首先设置为 -1 或“”)。这是我为了做到这一点而制作的功能:
private List<Meb> GroupIdenticalMeb(List<Meb> mebInput)
{
List<Meb> retour = new List<Meb>();
foreach(Meb mebOri in mebInput)
{
Meb meb = new Meb();
meb.ID = -1;
meb.Number = mebOri.Number;
meb.Length = mebOri.Length;
meb.Quantity=mebOri.Quantity;
foreach(Repere repOri in mebOri.ListReperes)
{
Repere rep = new Repere();
rep.Name = repOri.Name;
rep.Quantite = repOri.Quantite;
rep.ID = -1;
meb.ListReperes.Add(rep);
}
retour.Add(meb);
}
retour = retour.GroupBy(l => l.ListReperes)
.Select(cl => new Meb
{
ID=-1,
Number = cl.First().Number,
Length = cl.First().Length,
Quantity=cl.Sum(c => c.Quantity),
ListReperes = cl.First().ListReperes,
}).ToList();
return retour;
}
这个想法是:
第一个:我创建了一个新的List<Meb>,它复制了原始List<Meb>,对于List<Repere>,我也复制了它,但将ID设置为“-1”,因为其他属性可能不同。
第二个:我在List<Repere>上进行了分组
但是最后没有分组,输出和输入一样。
编辑:
我更好地解释了我的对象的结构,因为它似乎不够清楚:
每个 Meb 对象代表一个梁,每个梁包含 Repere 对象(细节),这些细节有很多参数,最重要的是 ID、名称、数量,具体示例:
ID Name Quantity
Meb1(Quantity1) contains : 11 Repere1 2
20 Repere2 1
25 Repere3 1
Meb2(Quantity2) contains : 12 Repere1 2
24 Repere2 2
28 Repere3 1
Meb3(Quantity3) contains : 31 Repere1 2
18 Repere2 1
55 Repere3 1
So I import my List<Meb>, and I want to group all my Mebs, comparing their details list.
In that case the result would be :
Meb1(Quantity4) contains : 0 Repere1 2
0 Repere2 1
0 Repere3 1
Meb2(Quantity2) contains : 0 Repere1 2
0 Repere2 2
0 Repere3 1
【问题讨论】:
-
我建议尝试使示例更简单。很难遵循你真正想要实现的目标。在我看来,您正在尝试在数组上执行 GroupBy,这不是 GroupBy 的完成方式。
-
好的,谢谢。事实上,我尝试在对象列表上创建一个 groupby——我的 list
有一个 列表,每个 Meb 都有一个 List ,如果 list 相同,那么我组。我第一次尝试做这样的事情,但不确定是否可以做到?