2009-06-11 78 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

你应该可以将你的代码粘贴到其中一个应用程序中,它会告诉你它的转换方式。希望他们派上用场:)