我要創建一個字典在LINQ匹配父母身份證字典。LINQ字典字典
我
Pseudo-Model:
Int ID;
Int Namel
Int? ParentID;
我想創建一個詞典Dictonaries的數據模型。 第一個詞典是那些只有父母 的人的ID,其中包含ID的字典將包含ID,Name。
我知道我可以通過循環做到這一點,但我想弄清楚如何通過LINQ來做到這一點。
我要創建一個字典在LINQ匹配父母身份證字典。LINQ字典字典
我
Pseudo-Model:
Int ID;
Int Namel
Int? ParentID;
我想創建一個詞典Dictonaries的數據模型。 第一個詞典是那些只有父母 的人的ID,其中包含ID的字典將包含ID,Name。
我知道我可以通過循環做到這一點,但我想弄清楚如何通過LINQ來做到這一點。
GroupBy
創建一個具有Key
值,你可以遍歷(或進行其他LINQ的呼籲)的IGrouping
。
ToDictionary
需要兩個選擇器 - 一個用於鍵和一個用於值。外字典的關鍵字爲ParentID
,值爲另一個字典,關鍵字爲ID
,值爲Name
。
假設ID
是唯一的(至少內的ParentID
基團)可以這樣做:
_model.Terrtories
.GroupBy(i => i.ParentID.HasValue ? i.ParentID.Value : 0)
.ToDictionary(g => g.Key, // outer dictionary key
g => g.ToDictionary(i => i.ID, // inner dictionary key
i => i.Name)); // inner dictionary value
注意到外ToDictionary
第二個參數平移每個組內的物品放入內部字典。
This Kinda Make sense現在,我只是困惑關於它如何作用於團隊之後,因爲現在它是一羣東西。 也有一種方法來做組,如果父ID是空分配給0? –
它是'Territory'對象的分組。 'IGrouping'實現'IEnumerable
我無法理解我是在分組後對IEnumberable採取行動的。這現在的作品也修復空問題我仔細全部爲空0 var Terr = _model.TerritoryRightsLookups.ToList(); Terr.ForEach(i => {i = FK_ParentID =(i.FK_ParentID == null)?0:i.FK_ParentID; }); (i => i.Key,i => i.ToDictionary(g => g.ID,g => g.Name)); –
我不知道你會怎麼做,但這是它可能看起來像什麼。
var dict = new Dictionary<int, Dictionary<int,string>>()
{
{ 1, new Dictionary<int, string>()
{
{1, "Name1"},
{2, "Name2"},
{3, "Name3"},
}
},
{ 2, new Dictionary<int, string>()
{
{1, "Something1"},
{2, "Something2"},
{3, "Something3"},
}
},
};
如果要表示父/子關係,爲什麼不創建父/子關係?
public class Parent
{
public int ID { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
public string Name { get; set; }
}
我知道如何編寫這個代碼,我只是想在LINQ中這樣做,所以我不必寫出所有的代碼,我知道如何去做以備將來參考 –
爲什麼你要這樣做呢?創建一個扁平的字典不是更容易嗎? –
我想保持父母的孩子關係,即樹,我想看到所有的葉子 –
有趣的... 自己給一個鏡頭,並解釋你與示例代碼的問題。在此之前,這不是一個有效的問題。 –