我試圖根據以下(簡化)規則進行排序項的列表:複雜的LINQ與團體分類
我會每個項目具有以下屬性:
Id (int),
ParentId (int?),
Name (string)
PARENTID是將ForeignKey自連接到Id。如果某個項目具有ParentId,則該父項也將存在於該列表中。
我需要對列表進行排序,以便所有具有父項的項目都立即出現在其父項之後。然後所有項目將按名稱排序。
所以,如果我有以下幾點:
Id: 1, ParentId: null, Name: Pi
Id: 2, ParentId: null, Name: Gamma
Id: 11, ParentId: 1, Name: Charlie
Id: 12, ParentId: 1, Name: Beta
Id: 21, ParentId: 2, Name: Alpha
Id: 22, ParentId: 2, Name: Omega
然後,我希望他們整理如下:
IDS:2,21,22,1,12,11
目前最好的我可以想出的是按姓名排序,然後按ParentId分組如下:
var sortedItems = itemsToSort.OrderBy(x=> x.Name).GroupBy(x=> x.ParentId);
我的出發計劃是計算方式如下:(非功能代碼)
var finalCollection = new List<Item>
var parentGroup = sortedItems.Where(si => si.Key == null);
foreach(parent in parentGroup)
{
finalCollection.Add(parent);
foreach(child in sortedItems.Where(si => si.Key == parent.Id)
{
finalCollection.Add(child);
}
}
然而,parentGroup不
IEnumerable<Item>
所以這是行不通的。
我覺得有一個更簡單,更簡潔的方式來實現這一目標,但目前它正在逃避我 - 任何人都可以幫忙嗎?
parentGroup肯定會是'IEnumerable <>' - 給你的印象是什麼? – Jamiec
是否只有頂級項目和一級子項,或者還有更深層次的項目? – dtb
@Jamiec:收到它 - 我的斜角括號已被隱藏 - 讓我改正 – BonyT