我要创建一个字典在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中这样做,所以我不必写出所有的代码,我知道如何去做以备将来参考 –
为什么你要这样做呢?创建一个扁平的字典不是更容易吗? –
我想保持父母的孩子关系,即树,我想看到所有的叶子 –
有趣的... 自己给一个镜头,并解释你与示例代码的问题。在此之前,这不是一个有效的问题。 –