2012-07-30 137 views
3

我在網上進行了研究,大多數結果都是從sql轉換到linq,很少有linq到sql。將Linq轉換爲SQL

這是我要轉換爲SQL代碼:

using (CommerceEntities db = new CommerceEntities()) 
    { 
    try 
     { 
     var query = (from ProductOrders in db.OrderDetails 
         join SelectedProducts in db.Products on ProductOrders.ProductID 
         equals SelectedProducts.ProductID 
         group ProductOrders by new 
          { 
          ProductId = SelectedProducts.ProductID, 
          ModelName = SelectedProducts.ModelName 
          } into grp 
         select new 
          { 
          ModelName = grp.Key.ModelName, 
          ProductId = grp.Key.ProductId, 
          Quantity = grp.Sum(o => o.Quantity) 
          } into orderdgrp where orderdgrp.Quantity > 0 
         orderby orderdgrp.Quantity descending select orderdgrp).Take(5); 

        RepeaterItemsList.DataSource = query; 
        RepeaterItemsList.DataBind(); 
     } 
    catch (Exception exp) 
     { 
     throw new Exception("ERROR: Unable to Load Popular Items - " + 
          exp.Message.ToString(), exp); 
     } 
    } 
+0

您可以隨時使用Profiler來看看實際的查詢生產,或插入某種形式的日誌記錄。 – 2012-07-30 06:53:43

+0

嗨,我在Microsoft Visual Studio中使用SQL Server。 – user1529419 2012-07-30 06:56:42

+1

你爲什麼不嘗試Linqpad,它會幫助你理解事物,你也可以看到生成的SQL。 – 2012-07-30 06:58:23

回答

2

您可以嘗試在LinqPad運行LINQ聲明。有關如何使用LinqPad的示例,請參閱check the answer here

它有一個標籤來顯示生成的SQL語句。

+0

我已經下載了LinqPad,但如何使用它? – user1529419 2012-07-30 09:07:22

1

Here's an article on logging in LINQ to SQL。它允許您指定發送查詢的TextWriter。

基本上,你可以寫這樣的事情:

db.Log = new System.IO.StreamWriter("linq-to-sql.log") { AutoFlush = true }; 

...其中db是你的數據上下文。

在SQL你會寫這樣的事情(雖然生成的代碼看起來有很多不同的,因爲它是自動生成的):

SELECT TOP 5 Products.ModelName, Products.ProductID, SUM(OrderDetails.Quantity) qty 
FROM OrderDetails 
INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY Products.ProductID, Products.ModelName 
HAVING qty > 0 
ORDER BY qty DESC