using System.Collections.Generic;
using System.Collections;
public static void Main()
List<dynamic> ttt = new List<dynamic>()
new { Mode = 1, Com = "1_1" },
new { Mode = 1, Com = "1_2" },
new { Mode = 2, Com = "2_1" },
new { Mode = 2, Com = "2_2" },
new { Mode = 3, Com = "3_1" },
new { Mode = 3, Com = "3_2" },
var grouped = ttt.GroupBy(obj => obj.Mode);
var list = ItemGroup<object>.ConvertGroupResult(grouped, "Mode {0}");
public class ItemGroup<TValue> : List<TValue>
public ItemGroup(IGrouping<object, TValue> baseGroup)
this.AddRange(baseGroup);
public ItemGroup(IEnumerable<TValue> baseGroup, object key)
this.AddRange(baseGroup);
public static List<ItemGroup<TValue>> ConvertGroupResult(IEnumerable<IGrouping<object, TValue>> res, string defaultFormat = "{0}")
List<ItemGroup<TValue>> list = new List<ItemGroup<TValue>>();
list.Add(new ItemGroup<TValue>(g) { DisplayNameFormat = defaultFormat });
public object Key { get; set; }
private string dispName = "";
public string DisplayName
get => dispName == "" ? String.Format(DisplayNameFormat, Key.ToString()) : dispName;
public string DisplayNameFormat { get; set; } = "{0}";