gpt4 book ai didi

linq - 使用 LINQ 规范化数据

转载 作者:行者123 更新时间:2023-12-04 16:02:44 26 4
gpt4 key购买 nike

假设我们有一些非规范化数据,如下所示:

List<string[]> dataSource = new List<string[]>();
string [] row1 = {"grandParentTitle1", "parentTitle1", "childTitle1"};
string [] row2 = {"grandParentTitle1", "parentTitle1", "childTitle2"};
string [] row3 = {"grandParentTitle1", "parentTitle2", "childTitle3"};
string [] row4 = {"grandParentTitle1", "parentTitle2", "childTitle4"};
dataSource.Add(row1);

我需要对其进行标准化,例如获得 IEnumerable< Child > 与 Child.Parent 和 Child.Parent.GrandParent 填充。

势在必行的方式或多或少是明确的。使用 Linq 会更短吗?

在一个查询中更好,并且这应该可以扩展到更多实体。

我尝试过像单独创建 IEnumerable ,然后使用分配等创建 IEnumerable

请提出提示,这可以以功能方式实现吗?

最佳答案

您可以使用 group by 做您想做的事情。不幸的是,我对 C# LINQ 语法的了解有限,所以我只能向您展示调用扩展方法 GroupBy 的方式。

var normalized = dataSource
.GroupBy(source => source[0], (grandParent, grandParentChilds) => new { GrandParent = grandParent, Parents = grandParentChilds
.GroupBy(source => source[1], (parent, parentChilds) => new { Parent = parent, Children = from source in parentChilds select source[2]}) });

foreach (var grandParent in normalized)
{
Console.WriteLine("GrandParent: {0}", grandParent.GrandParent);
foreach (var parent in grandParent.Parents)
{
Console.WriteLine("\tParent: {0}", parent.Parent);
foreach (string child in parent.Children)
Console.WriteLine("\t\tChild: {0}", child);
}
}

关于linq - 使用 LINQ 规范化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com