\r
private TreeNode CreateItemNodes(IEnumerable<ItemStatus> itemList)\r
{\r
- var grouped = from byItem in (from item in itemList\r
+ var grouped = from item in itemList\r
where item.Spec.Id != -1\r
- orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level descending\r
- group item by new {item.Spec.Id, item.Alv, item.Level}\r
- into grp\r
- from byShip in\r
- (from item in grp\r
- let ship = item.Holder\r
- orderby ship.Level descending, ship.Spec.SortNo\r
- group item by item.Holder.Id)\r
- group byShip by grp.Key)\r
- group byItem by byItem.First().First().Spec.Type;\r
+ orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level\r
+ group item by item.Spec.Type\r
+ into byTypeGroup\r
+ from bySpec in (from item in byTypeGroup\r
+ group item by item.Spec.Id\r
+ into bySpecGroup\r
+ from byParam in (from item in bySpecGroup\r
+ group item by new {item.Alv, item.Level}\r
+ into byParamGroup\r
+ from byHolder in (from item in byParamGroup group item by item.Holder.Id)\r
+ group byHolder by byParamGroup.Key)\r
+ group byParam by bySpecGroup.Key)\r
+ group bySpec by byTypeGroup.Key;\r
\r
var root = new TreeNode();\r
foreach (var byType in grouped)\r
{\r
- var typeName = byType.First().First().First().Spec.TypeName;\r
+ var typeName = byType.First().First().First().First().Spec.TypeName;\r
var typeNode = new TreeNode();\r
typeNode.Name = typeNode.Text = typeName;\r
root.Nodes.Add(typeNode);\r
- foreach (var byItem in byType)\r
+ foreach (var bySpec in byType)\r
{\r
- var item = byItem.First().First();\r
+ var item = bySpec.First().First().First();\r
var itemNode = new TreeNode();\r
- itemNode.Name = itemNode.Text = item.Spec.Name +\r
- (item.Alv == 0 ? "" : "+" + item.Alv) +\r
- (item.Level == 0 ? "" : "★" + item.Level);\r
+ itemNode.Name = itemNode.Text = item.Spec.Name + "x" +\r
+ bySpec.SelectMany(spec => spec).SelectMany(param => param).Count();\r
typeNode.Nodes.Add(itemNode);\r
- foreach (var byShip in byItem)\r
+ foreach (var byParam in bySpec)\r
{\r
- var ship = byShip.First().Holder;\r
- var name = byShip.Key == -1\r
- ? "未装備x" + byShip.Count()\r
- : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
- ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "×" + byShip.Count();\r
- itemNode.Nodes.Add(name, name);\r
+ TreeNode paramNode;\r
+ if (bySpec.Count() == 1 && byParam.Key.Alv == 0 && byParam.Key.Level == 0)\r
+ {\r
+ paramNode = itemNode;\r
+ }\r
+ else\r
+ {\r
+ paramNode = new TreeNode();\r
+ item = byParam.First().First();\r
+ paramNode.Name = paramNode.Text =\r
+ (item.Spec.IsAircraft ? "+" + item.Alv : "") + "★" + item.Level + "x" +\r
+ byParam.SelectMany(param => param).Count();\r
+ itemNode.Nodes.Add(paramNode);\r
+ }\r
+ foreach (var byShip in byParam)\r
+ {\r
+ var ship = byShip.First().Holder;\r
+ var name = byShip.Key == -1\r
+ ? "未装備x" + byShip.Count()\r
+ : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
+ ship.Name + (ship.Level > 0 ? "Lv" + ship.Level : "") + "x" + byShip.Count();\r
+ paramNode.Nodes.Add(name, name);\r
+ }\r
}\r
}\r
}\r
// ReSharper disable PossibleNullReferenceException\r
=> x.Level == y.Level && x.Spec == y.Spec && x.Holder.Id == y.Holder.Id &&\r
x.Holder.Fleet == y.Holder.Fleet;\r
- // ReSharper restore PossibleNullReferenceException\r
+ // ReSharper restore PossibleNullReferenceException\r
\r
public int GetHashCode(ItemStatus obj) => obj.Level + obj.Spec.GetHashCode() + obj.Holder.GetHashCode();\r
}\r