Преобразование QueryExpression в строку SQL

Есть ли способ преобразовать QueryExpression в оператор SQL? например, это:

QueryExpression query = new QueryExpression("entity");
query.ColumnSet = new ColumnSet("col1");
query.Criteria.AddCondition("col2", ConditionOperator.Equal, 1);

к

SELECT col1 FROM entity WHERE col2 = 1

Какая-то конкретная причина, по которой вы все равно хотите это сделать? Не очень практично.

haag1 27.11.2018 14:30

Было бы полезно упомянуть, какую технологию вы используете. Похоже, вы говорите о QueryExpression, который находится в Microsoft.Xrm.Sdk.Query (то есть Microsoft Dynamics), но есть много поставщиков, которые используют такой подход к запросам.

Jeroen Mostert 27.11.2018 17:44

Я предлагаю вам рассмотреть возможность преобразования в FetchXML (встроенное преобразование в XRM) и написать преобразователь из FetchXML в SQL.

NetMage 27.11.2018 22:44

@ haag1 для тестирования и отладки

Banana Cake 28.11.2018 11:27

@NetMage Спасибо, помогло.

Banana Cake 28.11.2018 12:16

@BananaCake, конечно .. да, мои извинения, лол

haag1 28.11.2018 15:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
822
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я предполагаю, что вы спрашиваете, есть ли автоматический способ сделать это, и краткий ответ - Нет. Если нет кого-то, кто взял на себя задачу написать библиотеку для этого (чего я не видел), это не что-то, что поддерживается в .NET из коробки.

Для этого есть несколько причин, но наиболее очевидная из них заключается в том, что QueryExpression реализует функции, которые изначально не поддерживаются в SQL. Это операции, которые может выполнять Entity Framework, потому что он может просто читать все объекты в память и после этого делать все, что захочет. Используя SQL, вы должны отправить эти инструкции на сервер базы данных, и он должен понимать, что вы ему говорите.

Опять же, я не говорю, что это невозможно. Если бы вы действительно хотели этого, вы, вероятно, могли бы придумать несколько очень креативных способов имитации того, что делает Entity Framework, но это будет тяжелая битва.

Да, я пытался написать что-то быстро, но потом нашел именно то, что вы пишете. Для этого можно написать какую-нибудь библиотеку, но это будет очень утомительно и долго.

Banana Cake 28.11.2018 11:27
Ответ принят как подходящий

Решение состоит в том, чтобы преобразовать запрос в FetchXML (https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/sample-convert-queries-fetch-queryexpression), а затем найти некоторые инструменты или библиотеки для преобразования FetchXML в SQL.

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