将父子结构转换为子父结构
Transform a parent child structure to child parent
我正在做一个项目,我需要能够将复杂的父子结构转换为其子父结构,这是必要的,因为需要从父结构或儿童视角这可能没有多大意义,但这里有一些示例数据的简化版本:
假设我有这个数据:
基色(红、蓝、绿)
强调色(红色、黄色、蓝色)
我想将其转换为:
红色(基色、强调色)
蓝色(基色、强调色)
绿色(基色)
黄色(强调色)
Linq 似乎是这个的理想选择,但我想不通,我知道我可以用很长的方法来做,但它看起来很笨重。
到目前为止,我有这个测试 class 来对抗:
class UsageType
{
public string Usage { get; set; }
public List<Colour> Colours = new List<Colour>();
}
class Colour
{
public string Name { get; set; }
}
public class TestClass
{
public TestClass()
{
var usageTypes = new List<UsageType>()
{
new UsageType()
{
Usage = "base colours",
Colours = new List<Colour>()
{
new Colour() { Name = "Red"},
new Colour() { Name = "Blue"},
new Colour() { Name = "Green"}
}
},
new UsageType()
{
Usage = "accent colours",
Colours = new List<Colour>()
{
new Colour() { Name = "Red"},
new Colour() { Name = "Blue"},
new Colour() { Name = "Yellow"}
}
}
};
var allColours = from clr in usageTypes
.SelectMany(ut => ut.Colours, (clr, ut) => new { colour = ut.Name, usage = clr.Usage })
select new { clr.colour, clr.usage };
}
}
我想知道的是如何从我的扁平化颜色列表(我的示例中的 allColours 变量)中获取并根据我的问题构建它。任何有关执行此操作的最佳方法的帮助将不胜感激。
GroupBy
颜色基本上会给你想要的格式:
var colourUsage =
from ut in usageTypes
from c in ut.Colours
group ut.Usage by c.Name into g
select new { colour = g.Key, usages = g.ToList() };
我正在做一个项目,我需要能够将复杂的父子结构转换为其子父结构,这是必要的,因为需要从父结构或儿童视角这可能没有多大意义,但这里有一些示例数据的简化版本:
假设我有这个数据:
基色(红、蓝、绿) 强调色(红色、黄色、蓝色)
我想将其转换为:
红色(基色、强调色) 蓝色(基色、强调色) 绿色(基色) 黄色(强调色)
Linq 似乎是这个的理想选择,但我想不通,我知道我可以用很长的方法来做,但它看起来很笨重。
到目前为止,我有这个测试 class 来对抗:
class UsageType
{
public string Usage { get; set; }
public List<Colour> Colours = new List<Colour>();
}
class Colour
{
public string Name { get; set; }
}
public class TestClass
{
public TestClass()
{
var usageTypes = new List<UsageType>()
{
new UsageType()
{
Usage = "base colours",
Colours = new List<Colour>()
{
new Colour() { Name = "Red"},
new Colour() { Name = "Blue"},
new Colour() { Name = "Green"}
}
},
new UsageType()
{
Usage = "accent colours",
Colours = new List<Colour>()
{
new Colour() { Name = "Red"},
new Colour() { Name = "Blue"},
new Colour() { Name = "Yellow"}
}
}
};
var allColours = from clr in usageTypes
.SelectMany(ut => ut.Colours, (clr, ut) => new { colour = ut.Name, usage = clr.Usage })
select new { clr.colour, clr.usage };
}
}
我想知道的是如何从我的扁平化颜色列表(我的示例中的 allColours 变量)中获取并根据我的问题构建它。任何有关执行此操作的最佳方法的帮助将不胜感激。
GroupBy
颜色基本上会给你想要的格式:
var colourUsage =
from ut in usageTypes
from c in ut.Colours
group ut.Usage by c.Name into g
select new { colour = g.Key, usages = g.ToList() };