2011-07-14 3 views
0

J'ai deux tables: Category (Id, Name, ...) et Question (Id, CategoryId, Title, ...) avec la relation Category 1-* Question. J'ai besoin d'obtenir les trois premières catégories (avec le plus grand nombre de questions) de la base de données. j'ai écrit cette requête SQL:Requête SQL dans LINQ

SELECT TOP 3 c.Name, COUNT(q.CategoryId) 
FROM Category c 
JOIN Question q 
ON c.Id = q.CategoryId 
GROUP BY Name 
ORDER BY COUNT(q.CategoryId) DESC 

et bien sûr il fonctionne, mais je dois écrire cette requête dans LINQ. Le problème principal est dans la première ligne avec COUNT. Comment dois-je l'utiliser dans cette requête?

+1

S'il vous plaît poster une tentative. – Jeff

Répondre

3

Je ne suis pas sûr où vos données provient de la requête, mais ressemblera à quelque chose comme

var q = 
    from c in categories 
    join q in questions on c.Id equals q.CategoryID 
    group c by c.Name into g 
    orderby g.Count() descending 
    select new 
    { 
     Name = g.Key, 
     Count = g.Count() 
    }; 

q = q.Take(3); 
+0

Cela fonctionne, merci. – Greg