2013-05-03 4 views
2

У меня есть этот SQL запрос, который делает то, что я хочу, но я смущен, как GroupBy() и OrderBy() работы точно ...GroupBy и OrderBy в LINQ

Вот заявление SQL у меня есть, что работает отлично:

SELECT TOP 5 UserID, COUNT(*) 
    FROM SkillLevelMap 
    WHERE SkillID = 183 OR SkillID = 102 OR SKILLID = 103 
    GROUP BY UserID 
    ORDER BY COUNT(*) DESC 

что конечный продукт идеально есть список UserIds, которые удовлетворяют эти условия, упорядочено по вхождению каждого SkillID, где пользователь, который имеет наибольшее количество SkillIDs совпавший находится на вершине, спускаясь к людям которые имеют меньше.

То, что я пытался без толку:

var userList2 = SQEPData.AllSkillLevelMaps.Where(x => skillIDs.Contains(x.SkillID)).GroupBy(g => g.User); 

ответ

2

Ваш запрос, как представляется, что-то похожее на:

var userList2 = SQEPData.AllSkillLevelMaps 
        .Where(x => skillIDs.Contains(x.SkillID)) 
        .GroupBy(x => x.User) 
        .Select(g => new { User = g.Key, Count = g.Count() }) 
        .OrderByDescending(i => i.Count) 
        .Take(5);