2010-05-27 2 views
0

У меня есть следующий Список, который содержит следующую коллекцию.создание списка категорий с использованием 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; } 

    } 
+0

Ваш вопрос. Это не имеет никакого смысла. Также виртуальные свойства странны. – Will

+0

Не должно ли идентификатор ParentID быть другим? например Кошка и усы - это ID 1 и «Foot ball», а Pele - 2, так что вы можете их сгруппировать? – MrEdmundo

+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 как минимум.

НТН

0

Вот один из способов сделать это. (изменить, исправить для сирот и вернуть все корни)

+0

эй, спасибо, я попробовал первый, но, похоже, ParentId не является словарем. Я также попробовал второй, но как мне вернуть значение из этого? – frosty

+0

у вас должны быть сироты. –

Смежные вопросы