Avatar billede zentral Nybegynder
29. september 2008 - 10:12 Der er 10 kommentarer og
1 løsning

Brug af groupe by LINQ

Hej Hej...

Jeg kunne godt tænke mig at hente 12 højest bedømte drinks ud af min db... og jeg kan bar ikke få det til og virke


database diagrammet kan ses her...
http://www.zentral.dk/diagram.gif

jeg har lave en metode som giver alle de rigtige id'er ud, men pga. at min forkerte forståelse af groupe by så er det også det eneste som kommer ud...

    public static IQueryable GetHighestRatedDrinks()
    {
        DataContactClassDataContext db = new DataContactClassDataContext();

        var resultat = from p in db.RatingArchives
                group p.Rating by new { p.DrinkID } into g
                select new
                {
                    ID = g.Key.DrinkID.Value
                };

        return resultat;
    }

Med denne metode får jeg alle id'er du på de højest bedømte, men jeg kan ikke få navnet ud også.. så laver den dubletter hvis i forstår...
Avatar billede montago Praktikant
29. september 2008 - 14:48 #1
hvad med noget ala'


var resultat = from p in db.RatingArchives
                group p.Rating by new { p.DrinkID } into g
orderby g.Count() descending
                select new
                {
                    ID = g.Key.DrinkID.Value,
count = g.Count()
                };

foreach(var p in resultat.take(12) ){}
Avatar billede montago Praktikant
29. september 2008 - 14:49 #2
i din new {} - kan du jo indsætte navnet, som du henter fra din Drinks tabel

        group p.Rating by new { p.DrinkID, navn = db.Drinks(d=>d.DrinkID).Navn } into g
Avatar billede zentral Nybegynder
29. september 2008 - 18:18 #3
montago, når jeg køre dette

        var resultat = from p in db.RatingArchives
                      group p.Rating by new { p.DrinkID, navn = db.Drinks(d => d.DrinkID).Navn } into g
                      orderby g.Count() descending
                      select new
                      {
                          ID = g.Key.DrinkID.Value,
                          Name = g.Key.navn,
                          count = g.Count()
                      };

        foreach (var p in resultat.Take(12)) { }

        return resultat;

så får jeg en fejl ved group:
Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer<AnonymousType#1>' because it is not a delegate type

og ved resultat. i foreach løkken:
The type arguments for method 'System.Linq.Queryable.Take<TSource>(System.Linq.IQueryable<TSource>, int)' cannot be inferred from the usage. Try specifying the type arguments explicitly.


hele metoden er en IQueryable
Avatar billede montago Praktikant
29. september 2008 - 20:09 #4
hehe...

db.Drinks.Single( i stedet for db.Drink(
som jeg sagde... " noget ala' "


var resultat = from p in db.RatingArchives
                      group p.Rating by new { p.DrinkID, navn = db.Drinks.Single(d => d.DrinkID).Navn } into g
                      orderby g.Count() descending
                      select new
                      {
                          ID = g.Key.DrinkID.Value,
                          Name = g.Key.navn,
                          count = g.Count()
                      };

        foreach (var p in resultat.Take(12)) { }

        return resultat;
Avatar billede montago Praktikant
29. september 2008 - 20:09 #5
jeg mangler lidt databasen / objecterne at side med... så det hele blev skrevet i hånden efter bedste evne
Avatar billede zentral Nybegynder
29. september 2008 - 21:26 #6
montago... hehe bare iorden det ska nok lykkes...
får samme fejl på group og denne fejl:

Linje 45:                      group p.Rating by new { p.DrinkID, navn = db.Drinks.Single(d => d.DrinkName).Navn } into g


Cannot implicitly convert type 'int' to 'bool'
Avatar billede montago Praktikant
29. september 2008 - 21:31 #7
doh...

.Single() tager en Lamdba som skal give en Bool
defor:

group p.Rating by new {
  p.DrinkID,
  navn = db.Drinks.Single(
    d => d.DrinkName == p.DrinID
  ).Navn
} into g

umiddelbart har jeg ikke lige overblikket til at kunne sige, om vi gør tingene rigtigt... mest af alt, fordi dit diagram mangler RatingArchive tabellen
Avatar billede montago Praktikant
29. september 2008 - 21:32 #8
og selvfølgelig skal Propertien lige ændres til

.DrinkName

-->

db.Drinks.Single(
    d => d.DrinkName == p.DrinID
  ).DrinkName

som den står på tabellen
Avatar billede montago Praktikant
29. september 2008 - 21:34 #9
prøver igen:

group p.Rating by new {
  p.DrinkID,
  navn = db.Drinks.Single(
    d => d.DrinkID == p.DrinkID  //<-- havde 2 fejl her
  ).Navn
} into g
Avatar billede zentral Nybegynder
30. september 2008 - 14:44 #10
mange tak for hjælpen .!!. bestod svendeprøven med 10 tal.!.
så kom med et svar, du har virkelig fortjent mine points...
Avatar billede montago Praktikant
30. september 2008 - 20:26 #11
hihi... bestod du eller jeg :-D  ?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester