LinqPad-преобразование SQL в команду Linq
недавно я купил LinqPad в надежде, что это позволит мне преобразовать некоторый SQL в оператор LINQ.
используя LinqPad, я могу прикрепить DB и запустить инструкцию SQL, которая возвращает нужные мне результаты.
но я не могу найти "команду" для преобразования этого оператора SQL в LINQ.
можете ли вы сообщить мне, как конвертировать SQL в LINQ с помощью LinqPad? Или другой инструмент.
3 ответов
В общем, нет никаких инструментов для скрытого SQL для Linq как @andres-abel упоминалось раньше, но иногда вам нужно написать Linq, который будет выполняться точно так же, как указанный SQL (например, из-за проблем с производительностью, обратной совместимости или некоторых других причин).
В этом случае я посоветую вам сделать обратное проектирование самостоятельно:
- настройка ведения журнала инструкций SQL дампа, генерируемых Linq в
stdout
используя - вручную перепишите оператор Linq, пока не получите то, что вам нужно
есть инструмент под названием Linqer, но будьте осторожны: транслитерация с SQL на LINQ может дать вам худшее из обоих миров.
например, предположим, вы хотите, чтобы все покупки на 1000 долларов или больше оплачивались наличными или клиентами, которые живут в Вашингтоне. Вот запрос в SQL:
SELECT p.*
FROM Purchase p
LEFT OUTER JOIN
Customer c INNER JOIN Address a ON c.AddressID = a.ID
ON p.CustomerID = c.ID
WHERE
(a.State = 'WA' || p.CustomerID IS NULL)
AND p.ID in
(
SELECT PurchaseID FROM PurchaseItem
GROUP BY PurchaseID HAVING SUM (SaleAmount) > 1000
)
как перевести это на LINQ? Неправильный путь -транслитерировать запрос в LINQ, пытаясь воспроизвести внешний и внутреннее предложение joins, subquery и group. Правильный способ-отобразить исходный запрос (на английском языке) непосредственно в LINQ, используя линейный поток данных LINQ и свойства ассоциации:
Я хочу, чтобы все покупки...
from p in db.Purchases
...от 1000 долларов или больше...
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000
...оплачено наличными...
where p.Customer == null
...или клиентами, которые живут в Вашингтон!--20-->
|| p.Customer.Address.State == "WA"
вот последний запрос:
from p in db.Purchases
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000
where p.Customer == null || p.Customer.Address.State == "WA"
select p
Подробнее здесь.
LinqPad не содержит SQL - > LINQ translator. LinqPad фактически не содержит переводчика LINQ->SQL. Для перевода используется библиотека .Net Linq-to-Sql или Entity framework.
Я не знаю ни одного другого инструмента с возможностью. В простых случаях это можно было бы сделать, но для более сложных сценариев это было бы невозможно, поскольку нет выражения LINQ, которое соответствует некоторым конструкциям SQL.