Istnieje narzędzie o nazwie Linqer, ale należy uważać: transliteracji z SQL do LINQ może dać Ci worst of both worlds.
Załóżmy na przykład, że chcesz, aby wszystkie zakupy o wartości 1000 USD lub większej były opłacane gotówką lub klientami mieszkającymi w Waszyngtonie. Oto zapytanie w języku 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
)
Jak tłumaczyłby to na LINQ? Błędnym sposobem jest transliteracja transliteracji zapytania do LINQ, próbując odtworzyć zewnętrzne i wewnętrzne sprzężenia, podzapytanie i klauzulę grupy. Właściwy sposób jest mapowanie oryginalnego zapytania (w języku angielskim) bezpośrednio do LINQ, wykorzystując przepływ liniowy LINQ na właściwości danych i Stowarzyszenia:
Chcę wszystkie zakupy ...
from p in db.Purchases
.. .of 1000 $ lub większy ...
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000
... opłacone gotówką ...
where p.Customer == null
... lub przez klientów, którzy mieszkają w Waszyngtonie
|| p.Customer.Address.State == "WA"
Oto ostateczny zapytania:
from p in db.Purchases
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000
where p.Customer == null || p.Customer.Address.State == "WA"
select p
Więcej informacji here.
Istnieje narzędzie: zobacz moją odpowiedź poniżej –
Zobacz także to pytanie: http://stackoverflow.com/questions/296972/sql-to-linq-tool –