2010-05-26 99 views
1

我一直在努力將此SQL語句轉換爲LINQ to SQL VB.Net 9.0。我用Linqer但沒有成功。任何幫助,將不勝感激將此SQL語句轉換爲LINQ到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 

回答

0

這是一個去吧。我不在VB中進行任何編程,但我試圖儘可能地使語法正確。爲了簡單起見,我將它分成兩個查詢,但使用LINQ to SQL,第一個實際上並不導致查詢數據庫。它與第二個結合在一起。在枚舉第二個查詢之前,它們都不會執行。如果需要,添加續行。我不知道是否有三元運算符(在C#中有)的SQL翻譯。如果沒有,請在選擇之前對該部分進行實體化,獲得d.TotalHoles和h.TotalHoles,然後使用LINQ到對象來枚舉這些對象並構建狀態。從h

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

暗淡孔=在db.TotalHoles 組由h.TeeId成克 選擇TeeId =密鑰,TotalHoles = g.Count() 「範圍可變TeeId隱藏的變量在封閉塊或一個在查詢表達式「 – user351479 2010-05-27 00:26:22

+0

@goforebroke」中定義的範圍變量 - 您可以將它保留爲Key,然後在第二個查詢中使用'h.Key'而不是'h.TeeId'。至少我認爲這就是它的抱怨。 – tvanfosson 2010-05-27 00:35:05

+0

我只是想獲得第一個查詢來編譯,它不會。它不斷抱怨。 Dim holes = From h In db.DnnGolf_CourseHoles _ Group通過h.TeeId進入g = Group _ 選擇鍵,TotalHoles = g.Count() – user351479 2010-05-27 00:40:10