2013-05-04 3 views
0

SQL:LINQ - 3 суб выбирает с группой, имея граф

SELECT i.name, l.city, COUNT(l.city) AS num 
FROM locality l 
JOIN event e ON e.ID_locality = l.ID 
JOIN program p ON p.ID_event = e.ID 
JOIN interpreter i ON i.ID = p.ID_interpreter 
WHERE i.name = 'XXXX' 
GROUP BY l.city 
HAVING COUNT(l.city) = (
SELECT MAX(num) 
FROM (SELECT COUNT(city) AS num 
FROM (SELECT l.city FROM locality l 
JOIN event e ON e.ID_locality = l.ID 
JOIN program p ON p.ID_event = e.id 
JOIN interpreter i ON i.ID = p.ID_interpreter 
WHERE i.name = 'XXXX' 
GROUP BY l.city) tmp) tmp2) 

LINQ:

var q4 = from l in db.locality 
     join e in db.event on l.ID equals e.ID_locality 
     join p in db.program on e.ID equals p.ID_event 
     join i in db.interpreter on p.ID_interpreter equals i.ID 
     where i.name == "XXXX" 
     group l by l.city into grp 

Здравствуйте, У меня есть серьезные проблемы Rly с этим выбрать в LINQ. Я написал этот select в SQL, но я не знаю, как я могу использовать multi sub select с группой, имея счет ... Я хочу выбрать город, где интерпретатор «XXXX» действовал чаще всего, а также сколько раз интерпретатор действовал там. Я также проверил enter link description here, но он не помог мне, когда я пытался его использовать. Я буду счастлив, если кто-то может мне помочь. Для лучшей ориентации: databases tables

ответ

0

Я не уверен, но надеюсь, что вы это сделаете.

var query = (from l in db.locality 
      join e in db.event on l.ID equals e.ID_locality 
      join p in db.program on e.ID equals p.ID_event 
      join i in db.interpreter on i.ID equals p.ID_interpreter 
      group l by new { i.name, l.city } into g 
      where i.name == "XXXX" && 
      g.Count(x => x.city) == (from l in db.locality 
              join e in db.event on l.ID equals e.ID_locality 
              join p in db.program on e.ID equals p.ID_event 
              join i in db.interpreter on i.ID equals p.ID_interpreter 
              where i.name == "XXXX"     
              group l by l.city into g 
              select new 
              { 
               cityCount = g.Count(x => x.city) 
              }).Max() 

      select new 
      { 
       g.key.name, 
       g.key.city, 
       maxNum = g.count(x => x.city) 
      }).ToList(); 
+0

Thank u. Решение Ur помогло мне просто g.count (x => x.city) = (... не работает. Я предполагаю, что должен быть g.count (x => x.city) == (... но также subselect need return int number. Cuz g.Count() == здесь он хочет int number. Поэтому по-прежнему нужно немного исправить его. Однако большое вам спасибо :) – Matwosk

+0

Хм. Да. g.Count (x => x.city) == Должно быть. Unnoticed. g.Count (x => x.city) == отменить позже, чем когда скобки могут работать. Я рад, что это сработало. –