powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
9 сообщений из 9, страница 1 из 1
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384796
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как с помощью Linq можно получить из DataTable список объектов Родитель-Список_детей (для дерева)?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    public class DictionaryHierarchy
    {
        public int ID { get; set; }        
        public int? ParentID { get; set; }
        public string Name { get; set; }
        public double? Price { get; set; }
        public List<DictionaryHierarchy> Child { get; set; }

        public DictionaryHierarchy()
        {
            Child = new List<DictionaryHierarchy>();
        }
    }



Нужно всего 2 уровня. Я делаю так: но для родительских элементов не могу получить ID, Name, Price...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        var result = ds.Tables[0].AsEnumerable()
            .Where(r => r.Field<int?>("ParentID") != null)
            .GroupBy(r => new { ParentID = r.Field<int?>("ParentID") })
            .Select(g => new DictionaryHierarchy()
            {
                ParentID = g.Key.ParentID,
                Child = g.Select(x => new DictionaryHierarchy()
                {
                    ID = x.Field<int>("ID"),
                    ParentID = g.Key.ParentID,
                    Name = x.Field<String>("Name"),
                    Price = x.Field<double?>("Price")
                }).ToList()
            }).ToList();
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384798
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

Почему не можешь? Можешь. Выбирай Name, Price, ID для родителей, ты же этого не делаешь.
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384821
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как, не соображу..? Так не получается...
Код: c#
1.
2.
3.
ID = g.Filed<...>("...")
Price = g.Filed<...>("...")
...
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384825
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В смысле Field
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384829
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1А как, не соображу..? Так не получается...

А так?

Код: c#
1.
2.
3.
ID = g.Key.Filed<...>("...")
Price = g.Key.Filed<...>("...")
...
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384831
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

А, не заметил, в группу надо собрать эти поля:

Код: c#
1.
.GroupBy(r => new { ParentID = r.Field<int?>("ParentID"), ID = r.Field<int>("ID")..... })



Потом уже выбирать через Key:

ID = g.Key.ID

Хотя весь подход в целом на айс.
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384834
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,

Чёто туплю. Воспользуйся вот этой функцией:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private IEnumerable<DictionaryHierarchy> GetTree(IEnumerable<DataRow> rows, int? parentID)
{
    return 
      from r in rows
      where r.Field<int?>("ParentID") == parentID
      let id = r.Field<int>("ID")
      select new DictionaryHierarchy()
      {
         ID = id,
         ParentID = parentID,
         Name = r.Field<String>("Name"),
         Price = r.Field<double?>("Price")
         Child = GetTree(rows, id).ToList()
      });
}



Получишь полноценное дерево с максимальным уровнем вложенности.
Использовать так:

Код: c#
1.
var result = GetTree(ds.Tables[0].Cast<DataRow>(), null);
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39384838
Qwe.Qwe1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, то что нужно!
(Правда, вызов с Cast не сработал, вызвать буду так: "GetTree(ds.Tables[0].AsEnumerable(), null)")
...
Рейтинг: 0 / 0
Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
    #39385990
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Qwe.Qwe1,
ds.Tables[0].Rows.Cast<DataRow>()
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как с помощью Linq можно получить из DataTable список объектов Родитель-Дети
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]