170 похожих чатов

Всем привет! Кто-нибудь решал задачку поиска в иерархических данных? Например у

нас есть дерево:
Директор
---Секретарь
------Менеджер
------Старший менеджер
Поисковой запрос: менеджер
Я сначала ищу по фильтру. Для найденых элементов я нахожу всех предков. Потом Я создаю дерево до корня и добавляю в общую коллекцию.
Но получается следующим образом:
Директор
---Секретарь
------Менеджер
Директор
---Секретарь
------Старший менеджер
Хотя должно быть как в первом примере. В таком случае придется как то объединять деревья с элементами дерева. Пока в голову ничего не приходит как это сделать нормально.

18 ответов

5 просмотров

Я бы расплющил дерево в список и в нем искал что нужно. Расплющивание можно в отдельный extension вынести, который принимает вершину и Func<T, T>, довольно часто нужная операция (гугли flatten tree, если это кажется сложным)

Адиль- Автор вопроса
Иван
Я бы расплющил дерево в список и в нем искал что н...

Так ef core при запросе where выдает плоский список. Зачем мне использовать flatten? К тому же selectmany делает тоже самое что и flatten. Возможно я вас не правильно понял

Адиль
Так ef core при запросе where выдает плоский списо...

Ну так нужно сразу писать что речь про EF. Простой select тебе итак список вернет, в чем вопрос-то тогда?

Адиль- Автор вопроса
Иван
Ну так нужно сразу писать что речь про EF. Простой...

Простой селект возвращает мне просто элементы подходящие по условию. Данные элементы мне нужно выстроить в дерево. Тоесть если какой то дочерний элемент подходит по условию, то мне нужно вырисовать дерево до корня и вернуть его. Если есть несколько элементов на разных уровнях, то, соответственно, должно быть одно дерево включающее эти элементы, а не несколько деревьев для каждого элемента

Адиль
Простой селект возвращает мне просто элементы подх...

Делаешь include и оно само все выстроит, нужно только вершину найти

Alex
своего рода так можно заменить CTE ?

Ни разу не пользовался CTE с EF'ом

Адиль
Простой селект возвращает мне просто элементы подх...

Это университетская задача для типичного SQL-я, зачем в EF такое городить?

Иван
Ни разу не пользовался CTE с EF'ом

т.е. мне будет достаточно иметь ID и ParentID для выстраивания правильной иерархии?

Иван
Ага

и это за один запрос?

Иван
В EF ничего не нужно городить

Такая штука называется рекурсивный запрос https://habr.com/ru/post/43955/

Oleksandr Tsvirkun
Такая штука называется рекурсивный запрос https://...

У человека EF, зачем ему голый SQL? К тому же нужный запрос делается одной строкой типа db.Employees.Include(e => e.Childs).ToListAsync() Там будет нужная иерархия, нужно только вершину найти

Иван
У человека EF, зачем ему голый SQL? К тому же нужн...

> db.Employees.Include(e => e.Parent).ToListAsync() такой строкой разве можно вытянуть вершину начиная с ParentID == null ?

Alex
> db.Employees.Include(e => e.Parent).ToListAsync(...

Немного не так, поменял

Иван
Немного не так, поменял

а если разные таблицы по аналогии?

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Подскажите, можно ведь комбинировать запись данных в один и тот же Stream через TFileStream и через TCompressionStream поочерёдно? Ну т.е. часть данных мне нужно сжать, часть ...
notme
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати на работу никто не хочет, слегка на Сшке подписывать? От 170к в месяц, под Москвой
Andrey Ermakov
6
А подскажите вопрос. Запускаю приложение под дебагом, всё красиво дебажится. Копирую его в другую папку, запускаю, в делфи делаю атач ту процесс, бряки при этом перестают рабо...
Serjone
2
Карта сайта