最近、SQLステートメントをLINQステートメントに変換できるように、LINQPadを購入しました。
LINQPadを使用して、DBを接続し、必要な結果を返すSQLステートメントを実行できます。
しかし、そのSQLステートメントをLINQに変換する「コマンド」が見つかりません。
LINQPad OR別のツールを使用してSQLをLINQに変換する方法を教えてください。
一般に、@ andres-abelが言及したようにSQLをLinqに変換するツールはありませんが、指定されたSQLを正確に実行するLinqを作成する必要がある場合があります(たとえば、パフォーマンスの問題、下位互換性、またはその他の理由)。
この場合、自分でリバースエンジニアリングを行うことをお勧めします:
stdout
に設定します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にtransliterateして、外部結合と内部結合、サブクエリ、およびグループ句を再現しようとすることです。正しい方法は、元のクエリ(英語)を直接LINQにマッピングし、LINQの線形のデータフローと関連付けプロパティを活用することです。
すべての購入が必要です...
from p in db.Purchases
... $ 1000以上...
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000
...現金で支払い...
where p.Customer == null
...またはワシントンに住んでいる顧客による
|| 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トランスレーターが含まれていません。 LinqPadには実際にはLINQ-> SQLトランスレーターも含まれていません。翻訳は、.Net Linq-to-SqlライブラリまたはEntityフレームワークに依存しています。
その機能を持つ他のツールも知りません。単純な場合は作成できますが、より複雑なシナリオでは、一部のSQL構成要素に一致するLINQ式がないため不可能です。