我最近购买了 LINQPad,希望它能让我将 SQL 语句转换为 LINQ 语句。
使用 LINQPad,我可以附加一个数据库并运行返回我需要的结果的 SQL 语句。
但我找不到将该 SQL 语句转换为 LINQ 的“命令”。
您能否告诉我如何使用 LINQPad 或其他工具将 SQL 转换为 LINQ?
我最近购买了 LINQPad,希望它能让我将 SQL 语句转换为 LINQ 语句。
使用 LINQPad,我可以附加一个数据库并运行返回我需要的结果的 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 表达式。