gpt4 book ai didi

c# - 使用linq按父级对对象列表进行分组以输出子元素

转载 作者:行者123 更新时间:2023-11-30 22:05:20 24 4
gpt4 key购买 nike

我有一个关于 linq groupby 的愚蠢问题,我无法独自工作。

基本上我有一个项目列表,我试图通过其 parentId 列出详细信息将它们组合在一起

var list = new List<GroupItem>()
{
new GroupItem() {Id = 1, Name = ".net"},
new GroupItem() {Id = 2, Name = "asp.net", ParentId = 1},
new GroupItem(){Id = 3,Name = "c#",ParentId = 1},
new GroupItem(){Id = 4,Name = "php"},
new GroupItem(){Id = 5,Name = "zend",ParentId = 4}
};

var group = from g in list
group g by g.ParentId ==null
into grouped
select new
{
FrameworkId = grouped.Key,
Items = (from g in list
where g.ParentId==g.ParentId
select g).ToList()

};

foreach (var gi in group)
{

Console.WriteLine(gi.FrameworkId);
foreach (var item in gi.Items)
{
Console.WriteLine(item.Name);
}
}

我做错了什么?

最佳答案

您的查询好像太复杂了:

  1. 您应该按 ParentId 对不为 null 的项目进行分组
  2. 您不需要通过匹配 ParentId 再次查找项目,因为 GroupBy 运算符会为您完成

我的首选解决方案:

list.Where(x => x.ParentId != null)
.GroupBy(x => x.ParentId,
(key, elements) =>
new {
FrameworkId = key,
Items = elements.ToList()
})
.ToList();

关于c# - 使用linq按父级对对象列表进行分组以输出子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450094/

24 4 0
文章推荐: c# - Parse.com 查询的主线程问题
文章推荐: php - 如何优化这个 mysql 查询?脚本发布
文章推荐: c# - 将 list 和 list 组合成单个平面列表