Преобразуйте этот оператор SQL в LINQ-to-SQL - PullRequest
1 голос
/ 27 мая 2010

Я изо всех сил пытался преобразовать этот оператор SQL в LINQ to SQL VB.Net 9.0. Я использовал Linqer, но безуспешно. Любая помощь будет оценена

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

1 Ответ

0 голосов
/ 27 мая 2010

Вот и все. Я не занимаюсь программированием на VB, но я пытался получить синтаксис как можно точнее. Для простоты я разделил его на два запроса, но с LINQ to SQL первый фактически не приводит к запросу БД. Это просто в сочетании со вторым. Ни один из них не выполняется, пока вы не перечислите второй запрос. Добавьте продолжения строки, если и когда это необходимо. Я не знаю, есть ли перевод в SQL для троичного оператора (есть в C #). Если нет, материализуйте деталь перед выбором, получив d.TotalHoles и h.TotalHoles, затем используйте LINQ для объектов, чтобы перечислить их и построить статус.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...