18. maj 2009 - 22:17Der er
3 kommentarer og 1 løsning
Hjælp til link query, gruppering
Jeg har tre tabeller i min database. Jeg benytter Linq 2 sql. Mine tabeller er: Kategori, gruppe og link.
:Kategori -navn etc
:Gruppe -navn etc -kategoriid
:Link -navn -antalbesøg -gruppeid
Som man kan se er der en klar forbindelse mellem dem. Jeg vil nu gerne lave en query der kan give mig top 5 kategorier, hvis links har været mest besøgt (højest antalbesøg). Det vil sige de mest populære kategorier. Nogle der har et bud?
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
Her er en lille demo med kategori og link som LINQ to objects:
using System; using System.Collections.Generic; using System.Linq;
namespace E { public class Kategori { public int Id { get; set; } public string Navn { get; set; } } public class Link { public String Navn { get; set; } public int Antal { get; set; } public int Kategori { get; set; } } public class Program { public static void Main(string[] args) { List<Kategori> kats = new List<Kategori>(); kats.Add(new Kategori { Id=1, Navn="K1" }); kats.Add(new Kategori { Id=2, Navn="K2" }); kats.Add(new Kategori { Id=3, Navn="K3" }); kats.Add(new Kategori { Id=4, Navn="K4" }); kats.Add(new Kategori { Id=5, Navn="K5" }); kats.Add(new Kategori { Id=6, Navn="K6" }); List<Link> links = new List<Link>(); links.Add(new Link { Navn="A", Antal=3, Kategori=2 }); links.Add(new Link { Navn="B", Antal=2, Kategori=1 }); links.Add(new Link { Navn="C", Antal=4, Kategori=3 }); links.Add(new Link { Navn="D", Antal=5, Kategori=2 }); links.Add(new Link { Navn="E", Antal=1, Kategori=4 }); links.Add(new Link { Navn="F", Antal=7, Kategori=5 }); links.Add(new Link { Navn="G", Antal=6, Kategori=1 }); links.Add(new Link { Navn="H", Antal=4, Kategori=2 }); var q = (from k in kats join l in links on k.Id equals l.Kategori group l by k.Navn into g orderby g.Sum(l => l.Antal) descending select new { Navn=g.Key, Antal=g.Sum(l => l.Antal)}).Take(3); foreach(var r in q) { Console.WriteLine(r.Navn + " " + r.Antal); } Console.ReadKey(); } } }
Den maa kunne tilrettes til LINQ for SQL og dine tabeller.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.