LINQ to SQL“分组依据”

时间:2009-06-11 23:30:30

标签: linq-to-sql

我想知道是否有人可以帮助我。我想在VB.Net中使用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

2 个答案:

答案 0 :(得分:0)

有一些非常酷的LINQ学习工具。

这是我最喜欢的...... LinqPad。但您可能还想查看Linqer

您应该可以将代码粘贴到其中一个应用中,它会告诉您如何转换代码。希望他们派上用场:)

答案 1 :(得分:0)

这是我最喜欢的关于此主题的页面。我喜欢LINQ to SQL(希望他们打算继续通过实体框架支持它......)http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx。在此页面上,您将找到查询需求的所有答案。在没有测试它的情况下很难在这里格式化查询!

你的内部联接随着LtS的简单连接语法而消失。您可以在内部选择上说.Max()或在这里使用Max(伪functoid):

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