2009-06-11 18 views
0

誰かが私を助けることができるのだろうかと思います。 VB.NetでLINQを使って次のSQLクエリを複製したいと思います。サブクエリ/集計の仕方は少し不明です。LINQ To 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をチェックしたいと思うかもしれません。

あなたのコードをアプリに貼り付けることができるはずです。そのコードがどのように変換されたかが表示されます。彼らが便利になることを願って