LINQ-3通过计数进行分组选择

LINQ-3通过计数进行分组选择,linq,group-by,having,subquery,Linq,Group By,Having,Subquery,SQL: 林克: 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)

SQL:

林克:

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中的这个选择有非常严重的问题。我在SQL中写了这个选择,但我不知道如何通过计数将multi-sub-select与group一起使用。。。我想选择“XXXX”口译员最常在哪个城市表演,以及口译员在那个里表演了多少次。我也检查了一下,但当我试着使用它时,它对我没有帮助。如果有人能帮助我,我会很高兴的。
为了更好的定位:

我不确定,但我希望你能这样做

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

谢谢你。你的解决方案帮了我很多忙,只是g.count(x=>x.city)=(…不起作用。我想应该有g.count(x=>x.city)=(…但是subselect需要返回int number.Cuz g.count()==这里它需要int number。所以仍然需要少量修复。不过非常感谢:)嗯。是的。g.count(x=>x.city)==必须是。没有注意到。g.count(x=>x.city)==比括号可能起作用的时间晚些取消。我很高兴它起作用了。
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();