使用linq创建类别列表

时间:2010-05-27 15:15:48

标签: .net linq

我有以下列表,其中包含以下集合。

我如何用linq转换它,以便我获得嵌套项目。

 var categories = new List<Category>(); // id, parentId, name
        categories.Add(1, 0, "Sport");
        categories.Add(2, 0, "Pets");
        categories.Add(3, 1, "Foot ball");
        categories.Add(4, 2, "Cat");
        categories.Add(5, 3, "Pele");
        categories.Add(6, 4, "whiskers");
        // ie Pets - > Cat - > Whiskers





   public class Category
    {

        public int Id { get; set; }
        public int ParentId { get; set; }
        public ICollection<Category> Categories { get; set; }

    }

2 个答案:

答案 0 :(得分:1)

这样的事情:

        var nested = categories.GroupBy(c => c.ParentId)
                               .Select(cat => new Category
                               {
                                   ParentId =  cat.Key,
                                   Categories = cat.Select(x => new Category
                                                                    {
                                                                        Id = x.Id
                                                                    }).ToList()
                               });

我做了类似的工作但有两个级别,如果你需要更通用的东西和多个级别,我不确定你是否可以用LINQ做到这一点。

HTH

答案 1 :(得分:0)

这是一种方法。 (编辑,纠正孤儿,并返回所有根)

List<Category> results = new List<Category>();
Dictionary quickCategories = categories.ToDictionary(c => c.ID);

foreach(var g in categories.GroupBy(c => c.ParentID))
{
  if quickCategories.ContainsKey(g.Key)
  {
    quickCategories[g.Key].Categories = g.ToList();
  }
  else
  {
    results.AddRange(g);
  }
}