Zakładając tabelę tagów jak StackOverflow tagów pytanie:"Najpopularniejsza" GROUP BY w LINQ?
TagID (bigint) QuestionID (bigint) Tag (varchar)
Co jest najbardziej skutecznym sposobem, aby uzyskać 25 najbardziej używane tagi za pomocą LINQ? W SQL prosty GROUP BY zrobi:
SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag
Pisałem jakiś LINQ to działa:
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);
odczuwalna, naprawdę? Czy to nie jest mega-gadatliwe? Smutne jest to, że robię to, aby zapisać ogromną liczbę zapytań, ponieważ moje obiekty Tag zawierają już właściwość Frequency, która w innym przypadku musiałaby sprawdzać w bazie danych dla każdego tagu, jeśli faktycznie korzystałam z tej właściwości.
Więc następnie zanalizować te anonimowe typy powrotem do obiektów Tag:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
jestem nowicjuszem LINQ, a to nie wydaje się słuszne. Proszę, pokaż mi, jak to naprawdę się stało.
wierzę swój SQL powinno być 'SELECT Tag, COUNT (Tag) FROM Tags GROUP BY tag ORDER BY COUNT (Tag) DESC FETCH PIERWSZY TYLKO 25 RZECZYWISTYCH', które nie powodują, że Linq wygląda tak źle. – NetMage