Структура сущности и таблица самостоятельных привязков

StackOverflow https://stackoverflow.com/questions/7304881

Вопрос

Мне нужно иметь базу данных, которая начинается с таблицы, называемой «Пользователь», которая должна самостоятельно ссылаться и будет иметь очень глубокий график связанных объектов. Это должно быть похоже на левую сторону изображения ниже (игнорируйте правую сторону).

enter image description here

Мне также нужно будет пройти через этот график как вверх, так и вниз, чтобы рассчитать проценты, итоги и т. Д. Другими словами, мне нужно в некоторых случаях травзировать весь график.

Возможно ли это и/или как это делается? Можно ли быть сделанным правильно в операторе LINQ? Примеры?

РЕДАКТИРОВАТЬ:Я в основном пытаюсь создать сценарий сетевого маркетинга и должен рассчитать заработок каждого человека.

Примеры:

  1. Чтобы иметь возможность калалировать общие продажи для каждого пользователя при конкретном пользователе (поэтому у каждого пользователя будет какой -то доход).
  2. Рассчитайте комиссию на определенном уровне дерева (например, если у топового человека было по 3 человека ниже, каждый из которых продал продукт за 1 доллар, а комиссия составила 50%, то было бы 1,50 доллара.)
  3. Если я запросил изображение выше (слева) для "B", я должен получить "B, H, I, J, N, O"

Надеюсь, это поможет: s

Это было полезно?

Решение

Вы не можете пересечь все дерево, используя только LINQ таким образом, чтобы это было бы переводится в отдельный запрос SQL (или их постоянное количество). Вы можете сделать это либо с одним запросом для каждого уровня, либо с одним запросом, который ограничен определенным количеством уровней (но такой запрос станет действительно большим со многими уровнями).

В T-SQL (я полагаю, вы используете MS SQL Server), вы можете сделать это, используя рекурсивные общие выражения таблицы. Анкет Должно быть возможно поместить это в хранимую процедуру, которую вы можете использовать из LINQ, чтобы получить информацию, которую вы действительно хотите.

Подводя итог, ваши варианты:

  1. Не используйте LINQ, просто SQL с рекурсивным CTE
  2. Используйте рекурсивный CTE в хранимой процедуре от LINQ
  3. Используйте LINQ, создав один запрос для каждого уровня
  4. Используйте Ugly Linq Query Limited только несколькими уровнями

Другие советы

Я знаю, что это поздно, но если вы посмотрите на направленные алгоритмы графика, вы можете обойти рекурсивные проблемы. Проверьте эти 2 статьи:

http://www.sitepoint.com/hierarchical-data-database/

http://www.codeproject.com/articles/22824/a-model-to-represent-directed-aticclic-graphs-dag-o

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top