2010-05-26 5 views
1

J'ai eu du mal à convertir cette instruction SQL en LINQ en SQL VB.Net 9.0. J'ai utilisé Linqer mais pas de succès. Toute aide serait appréciéeConvertir cette instruction SQL en LINQ-to-SQL

select t.TeeId, 
    t.DescriptionId, 
    t.[Description], 
    t.Rating, 
    t.Slope, 
    case when d.TotalHoles <> h.TotalHoles then 0 
    else 1 end [Status] 
from dbo.CourseDescription d 
inner join dbo.CourseTees t 
on t.DescriptionId = d.DescriptionId 
inner join (select TeeId, count(*) as TotalHoles 
      from dbo.CourseHoles 
      group by TeeId) h 
on h.TeeId = t.TeeId 
where d.CourseId = 1 

Répondre

0

Voici un essai. Je ne fais aucune programmation en VB, mais j'ai essayé d'obtenir la syntaxe la plus correcte possible. Par souci de simplicité, je l'ai divisé en deux requêtes, mais avec LINQ to SQL, la première n'aboutit pas à une requête de la base de données. C'est simplement combiné avec le second. Aucun n'est exécuté jusqu'à ce que vous énumériez la deuxième requête. Ajoutez des continuations de ligne si et quand nécessaire. Je ne sais pas s'il y a une traduction en SQL pour l'opérateur ternaire (il y a en C#). Si ce n'est pas le cas, matérialisez la partie avant la sélection, en obtenant à la fois d.TotalHoles et h.TotalHoles, puis utilisez LINQ to objects pour les énumérer et construire l'état.

dim holes = from h in db.TotalHoles 
      groupby h.TeeId into g 
      select TeeId = Key, TotalHoles = g.Count() 

dim courses = from d in db.CourseDescription 
       where d.CourseId = 1 
       join t in CourseTees on d.DescriptionId equals t.DescriptionId 
       join h in holes on h.TeeId equals t.TeeId 
       select t.TeeId, 
        t.DescriptionId, 
        t.Description, 
        t.Rating, t.Slope, 
        Status = If(d.TotalHoles = h.TotalHoles, 1, 0) 
+0

trous dim = h à partir du groupe db.TotalHoles par h.TeeId en g sélectionner TeeId = Key, TotalHoles = g.Count() « Range variable TeeId cache une variable dans un bloc englobant ou une variable de plage précédemment définie dans l'expression de la requête " – user351479

+0

@goforebroke - vous pouvez simplement laisser Key, puis utiliser' h.Key' dans la deuxième requête au lieu de 'h.TeeId'. Au moins, je pense que c'est ce dont il se plaint. – tvanfosson

+0

J'essaie juste d'obtenir la première requête à compiler et ce ne sera pas le cas. Il continue à se plaindre. trous Dim = De h Dans db.DnnGolf_CourseHoles _ Groupe par h.TeeId g = Groupe Into _ Touche de sélection, TotalHoles = g.Count() – user351479

Questions connexes