最近、SQL ステートメントを LINQ ステートメントに変換できるようになることを期待して、LINQPad を購入しました。
LINQPad を使用して、DB をアタッチし、必要な結果を返す SQL ステートメントを実行できます。
しかし、その SQL ステートメントを LINQ に変換する「コマンド」が見つかりません。
LINQPad または別のツールを使用して SQL を LINQ に変換する方法を教えてください。
最近、SQL ステートメントを LINQ ステートメントに変換できるようになることを期待して、LINQPad を購入しました。
LINQPad を使用して、DB をアタッチし、必要な結果を返す SQL ステートメントを実行できます。
しかし、その SQL ステートメントを LINQ に変換する「コマンド」が見つかりません。
LINQPad または別のツールを使用して SQL を 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に音訳することです。正しい方法は、元のクエリ (英語) を直接 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
詳細はこちら。
一般に、@andres-abelが前述したようにSQLをLinqに変換するツールはありませんが、指定されたSQLとまったく同じように実行されるLinqを作成する必要がある場合があります(たとえば、パフォーマンスの問題、下位互換性、またはその他の理由のため)。
この場合、自分でリバース エンジニアリングを行うことをお勧めします。
stdout
する
LinqPad には SQL->LINQ トランスレータは含まれていません。LinqPad には、実際には LINQ->SQL トランスレータも含まれていません。変換には、.Net Linq-to-Sql ライブラリまたはエンティティ フレームワークに依存しています。
その機能を備えた他のツールも知りません。単純なケースでは作成できますが、より複雑なシナリオでは、一部の SQL 構造に一致する LINQ 式がないため不可能です。