2012-03-07 55 views
1

我試圖將以下SQL語句轉換爲linq查詢,但出於某種原因,我無法使其工作!將SQL查詢轉換爲Linq Lambda語句

SELECT  o.ITEMID, COUNT(o.ITEMID) AS COUNT, MAX(i.QUANTITY) AS Quantity 
FROM  ORDERS AS o LEFT OUTER JOIN 
      INVENTORY AS i ON o.ITEMID = i.ITEMID 
      GROUP BY o.ITEMID 

我發現this link,有類似的問題有人,但我不能似乎這適用於我需要什麼。


感謝您的全力幫助。

這是我的代碼至今

Dim castleavailability = _ 
      From o In orders _ 
      From i In inventorys _ 
      Where (x >= o.ITEMID = i.ITEMID) 
      Group New With {o, i} By o.ITEMID Into oi() 
      Select New With {.ItemId = oi.Key, .Count = oi.Select(y >= y.o.ItemId).Count(), .Quantity = oi.Select(y >= y.i.Quantity).Max()} 

現在我得到的錯誤是「方法的定義‘OI’是不是在這種情況下使用。」指的是「新組合」線。關於如何解決這個

非常感謝

+0

你嘗試過這麼遠嗎?而「不起作用」不是錯誤描述!不編譯?它會拋出一個運行時異常嗎?它運行但返回錯誤的結果? – 2012-03-07 14:58:32

+0

它是Linq-to-Sql還是Linq-To-Entities?它們不是同一件事。 – cadrell0 2012-03-07 15:02:01

+0

嗨,對不起,它是實體的LINQ。我不是故意單擊Linq到SQL – user789433 2012-03-07 15:23:13

回答

4

任何想法,這應該爲你工作

var query = from o in context.Orders 
      from i in context.Inventory 
          .Where(x = > o.ItemId = x.ItemId) 
          .DefaultIfEmpty() 
      group new { o, i } by o.ItemId into oi 
      select new 
      { 
       ItemId = oi.Key, 
       Count = oi.Select(y => y.o.ItemId).Count(), 
       Quantity = oi.Select(y => y.i.Quantity).Max(), 
      }; 
+0

哇,這是非常快的感謝非常感謝,我現在會測試這個。 – user789433 2012-03-07 15:20:17

+0

你好我編碼在VB等紛紛改變了這種稍微擺脫VS顯示錯誤,我有 昏暗castleavailability = _ 由鄰訂單_ 從我在inventorys _ 其中(x> = o.ITEMID = x.ItemId) 將新的{o,i}由o.ItemId轉換爲oi 選擇新的{ItemId = oi.Key,Count = oi.Select(y => yoItemId).Count(),Quantity = oi。選擇(y => yiQuantity).Max()} 我收到錯誤類型或'與'預計在'組新'{' 謝謝 – user789433 2012-03-07 15:33:49

+0

@ user789433 - 對不起,我不在VB代碼。 – Aducci 2012-03-07 15:58:04

0

您還可以使用Linqer軟件到SQL查詢轉換到LINQ查詢LAMBDA。

您可以從以下鏈接獲得該軟件:

http://www.sqltolinq.com/

+0

我正在使用Linqer,但無法找到任何選擇將SQL轉換爲使用Lambda表達式的Linq,只是經典的Linq – AlexGH 2016-07-27 16:56:04