Nano Hash - криптовалюты, майнинг, программирование

Преобразование оператора sql, содержащего cte, в linq

У меня есть этот фрагмент кода, я боролся с ним часами. в основном, этот оператор sql получает ВСЕ подпапки указанной папки (@compositeId).

WITH auto_table (id, Name, ParentID) AS
(
SELECT
    C.ID, C.Name, C.ParentID
FROM Composite_Table AS C
    WHERE C.ID = @compositeId

UNION ALL

SELECT
    C.ID, C.Name, C.ParentID
FROM Composite_Table AS C
    INNER JOIN auto_table AS a_t ON C.ParentID = a_t.ID
)

SELECT * FROM auto_table

Этот запрос вернет что-то вроде этого:

Id   |    Name    | ParentId
1    | StartFolder| NULL
2    | Folder2    | 1
4    | Folder3    | 1
5    | Folder4    | 4

Теперь я хочу преобразовать код в linq. Я знаю, что это связано с некоторой формой рекурсии, но все же застрял благодаря оператору with.


Ответы:


1

Нет эквивалента Linq to SQL, который может сделать это (эффективным образом). Лучшим решением было бы вызвать SP/View/UDF из Linq, содержащего этот оператор.

04.05.2011
  • Да, но я должен бойкотировать все SP и фактический код SQL. В этом случае нет выбора 04.05.2011
  • Почему?! Зачем писать плохой код, если у вас уже есть хорошее решение. Вы знаете, что Linq все равно генерирует SQL в конце? Я обычно использую Linq для большинства своих запросов доступа к данным, но когда требуется высокая производительность, я всегда пишу SQL напрямую. Запросы Sql в коде в контексте вашего db могут прекрасно отображаться в объектах Linq. 05.05.2011
  • Ах, теперь я определенно понял вашу точку зрения, большое спасибо за совет! 05.05.2011

  • 2

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

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

    04.05.2011

    3

    Существует известный плагин 'LinqToDb', который предоставляет методы для получения эквивалента CTE в Linq.

    16.01.2020

    4
  • Это вызовет БД для каждого узла в древовидной структуре. 04.05.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..