一些細節添加到您的要求,它似乎想要通過CategoryID
做正常對照組。然後,如果任何組只包含一個單個元素,您希望這些元素按Fruit
分組。該組的關鍵將必須包含CategoryID
和Fruit
。對於樣本數據中的組1和組2,Fruit
屬性將是Fruit
的默認值。對於組3,CategoryID
將是CategoryID
的默認值。
您可以通過執行兩個嵌套分組,然後再展開內部分組執行此計算:
var groupedItems = items
.GroupBy(item => item.CategoryID)
.GroupBy(
inner => inner.Count() > 1
? new { CategoryID = inner.Key, Fruit = default(String) }
: new { CategoryID = default(Int32), inner.First().Fruit }
)
.Select(
outer => outer.Count() == 1
? new { outer.Key, Items = outer.First().ToList() }
: new { outer.Key, Items = outer.Select(inner => inner.First()).ToList() }
);
鑑於此輸入
var items = new[] {
new { CategoryID = 1, Fruit = "Apple" },
new { CategoryID = 1, Fruit = "Coke" },
new { CategoryID = 2, Fruit = "Tablet" },
new { CategoryID = 2, Fruit = "Coke" },
new { CategoryID = 5, Fruit = "Coke" },
new { CategoryID = 6, Fruit = "Coke" }
};
你得到這個輸出
Key |Items
----------------+-----------------
CategoryId Fruit|CategoryID Fruit
----------------+-----------------
1 null |1 Apple
|1 Coke
----------------+-----------------
2 null |2 Tablet
|2 Coke
----------------+-----------------
0 Coke |5 Coke
|6 Coke
----------------+-----------------
什麼如果項目會分成兩組,例如你的例子中有2個可樂嗎? – MarcinJuraszek 2014-10-29 06:11:54
@MarcinJuraszek - 然後CategoryID組應該是首選。 – 2014-10-29 06:14:34