using System.Collections.Generic;
public string Group { get; set; }
public (string Item1, string Item2)[] ValeursAndUids { get; set; }
public static void Main()
var idA = "QB32-20220325-486274";
var idB = "QB32-20220325-106045";
var idC = "QB32-20220325-205994";
var idD = "QB32-20220325-270903";
Group = "ref_commercial",
Product[] products = new[] { product1, product2, product3 };
List<((string GroupName, string Valeur)[] Levels, string[] Uids)> groupings = products
.SelectMany(p => p.ValeursAndUids
.Select(vu => ( GroupName: p.Group, Valeur: vu.Item1, Uid: vu.Item2)))
.GroupBy(item => item.Uid,
item => ( item.GroupName, item.Valeur) )
.GroupBy(itemsByUid => string.Join(string.Empty, itemsByUid.Select(_ => _)),
Levels: nestedGroup.First().Select(level => level).ToArray(),
Uids: nestedGroup.Select(itemsByUid => itemsByUid.Key).ToArray()
foreach (var grouping in groupings)
foreach (var level in grouping.Levels)
Console.WriteLine($"{tabs}{level.GroupName} {level.Valeur}");
foreach (var uid in grouping.Uids)
Console.WriteLine($"{tabs}{uid}");