2009-06-11 5 views
0

Je me demande si quelqu'un peut m'aider. Je veux répliquer la requête SQL suivante à l'aide de LINQ dans VB.Net. Je ne sais pas très bien comment faire des sous-requêtes/agrégats.LINQ To SQL "Grouper par"

Merci

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 

Got cela comme ci-dessous en C# =>besoin VB.Net conversion. S'il vous plaît

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 

Répondre

0

Ceci est ma page favorite sur ce sujet. J'adore LINQ to SQL (et j'espère qu'ils ont l'intention de continuer à le supporter sur Entity Framework ...) http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx. Sur cette page, vous trouverez toutes les réponses à vos besoins d'interrogation. Il est difficile de formater la requête ici sans quelque chose pour le tester! Vos jointures internes disparaissent avec la syntaxe de jointure simple de LtS. Vous pouvez soit dire .Max() sur votre sélection interne ou Max (pseudo functoid ici) comme ceci:

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

Il existe quelques outils d'apprentissage LINQ qui sont plutôt sympas.

Celui-ci est mon préféré ... LinqPad. Mais vous pouvez également vouloir vérifier Linqer.

Vous devriez pouvoir coller votre code dans l'une d'elles et il vous montrera comment il est converti. J'espère qu'ils sont utiles :)