En supposant une table de balises comme le stackoverflow question tags:
TagID (bigint), QuestionID (bigint), Tag (varchar)
Quel est le moyen le plus efficace pour obtenir les 25 plus utilisé balises à l'aide de LINQ? Dans SQL, un simple GROUPE de PAR la volonté de faire:
SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag
J'ai écrit certains de LINQ qui fonctionne:
var groups = from t in DataContext.Tags
group t by t.Tag into g
select new { Tag = g.Key, Frequency = g.Count() };
return groups.OrderByDescending(g => g.Frequency).Take(25);
Comme, vraiment? N'est-ce pas mega-verbose? Le plus triste, c'est que je fais cela pour sauver un grand nombre de requêtes, comme sur mon Tag objets contiennent déjà une Fréquence de propriété qui serait autrement nécessaire de vérifier de retour avec la base de données pour chaque Balise si j'ai effectivement utilisé la propriété.
J'ai donc ensuite d'analyser ces types anonymes de retour dans la Balise objets:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
Je suis une LINQ newbie, et cela ne semble pas juste. Merci de me montrer comment il est vraiment fait.