2009-06-11 103 views
0

我不知道是否有人可以幫助我。我想在VB.Net中使用LINQ複製下面的SQL查詢。我有點不清楚如何做子查詢/聚合。LINQ到SQL「分組依據」

由於

SELECT * 
FROM Server S 
    INNER JOIN ServerHDD H 
      ON S.Server_ID = H.Server_ID 
    INNER JOIN (SELECT  MAX(ServerHDD_ID) AS ServerHDD_ID 
          FROM ServerHDD 
          GROUP BY Server_ID, Letter) Filter 
      ON H.ServerHDD_ID = Filter.ServerHDD_ID 
ORDER BY S.Hostname, H.Letter 

得到這個如下面C#=>需要VB.Net轉換請

from S in SERVER 
join H in SERVERHDD on S.Server_ID equals H.Server_ID 
join FILTER in 
    (from s in SERVERHDD group s 
      by new {s.Server_ID, s.Letter} 
      into groupedServerHDD select new 
        { 
          SERVERHDD_ID = groupedServer.Sum(gS=>gS.ServerHDD_ID) 
        } 
    ) 
    on H.ServerHDD_ID equals FILTER.SERVERHDD_ID 
    orderby S.Hostname, H.Letter 
    select S 

回答

0

這是我最喜歡的關於這個話題的網頁。我喜歡LINQ to SQL(並希望他們打算繼續通過Entity Framework對它進行支持......)http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx。在此頁面上,您可以找到所有查詢需求的答案。很難在這裏格式化查詢,而無需對其進行測試!

你的內部連接消除了LtS的簡單連接語法。你可以在你的內部選擇或Max(僞functoid在這裏)上說.Max(),像這樣:

From p2 In g _ 
Where p2.UnitPrice = g.Max(Function(p3) p3.UnitPrice) _ 
Select p2 
0

這裏有幾個LINQ學習工具,非常酷。

這是我的最愛... LinqPad。但你可能也想看看Linqer

你應該可以將你的代碼粘貼到其中一個應用程序中,它會告訴你它的轉換方式。希望他們派上用場:)