Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 00:00 Der er 18 kommentarer og
1 løsning

LINQ hvordan sætter jeg en liste til noget i et LINQ udtryk?

Jeg har et fx. LINQ udtryk:
Børn er også List<Person>


var personer = personer.Select(

    p => new Person {
                Fornavn = p.Fornavn ,
                Efternavn = p.Efternavn ,
                Alder = p.Alder
                Børn = ???? [Pseudokode (hvad jeg forsøger på)] new Person<List>() { Fornavn = p.navn, Efternavn = p.Efternavn, Alder = x.Alder }).ToList()

            }).ToList();
Avatar billede arne_v Ekspert
05. oktober 2012 - 00:07 #1
boern = new List<Person> { o1, o2, o3 }
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 00:12 #2
Damn jeg glemte en detalje.

Jeg har en en børneliste (BørnListe = List<Person>)

LINQ udtrykket er rettere:

p => new Person {
                Fornavn = p.Fornavn ,
                Efternavn = p.Efternavn ,
                Alder = p.Alder
                Børn = ????  [Pseudokode (hvad jeg forsøger på)] new BørnListe() { Fornavn = p.navn, Efternavn = p.Efternavn, Alder = x.Alder }).ToList()

            }).ToList();
Avatar billede arne_v Ekspert
05. oktober 2012 - 00:23 #3
boern = eksisterende liste,

eller

boern = new List<Person> { new Person { Fornavn=f1, Efternavn=e1, Alder=a1 }, new Person { Fornavn=f2, Efternavn=e2, Alder=a2 } },
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 00:27 #4
Tror din version to er det jeg er ude efter. Skal man ikke lave en ToList()? Well jeg finder ud af det imorgen på arbejde... har ikke koden på mig her :)

Send bare et svar, tror du har givet det jeg har brug for, ellers skriver jeg bare her igen ...
Avatar billede arne_v Ekspert
05. oktober 2012 - 00:50 #5
Nej.

ToList bruges naar man har en IEnumerable og vil have en List.
Avatar billede arne_v Ekspert
05. oktober 2012 - 00:50 #6
svar
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 11:30 #7
Jeg har et problem her, som er det jeg havde skrevet ind på:

Jeg får en "cannot convert expression type 'System.Linq.IQueryable<BilListe> to return type BilListe'":

public BilListe HentBilListe(){
    var bilListe = HentData(
    () => Biler.Where(p => p.Aargang == 1990).Select(
            p => new BilListe
                {
                    Biler = new List<Bil>
                        {
                            new Bil
                                {
                                    Id = p.Id,
                                    Model = p.Model,
                                    Maerke = p.Maerke
                                    Aargang = p.Aargang
                                }
                        }
                });
    return bilListe;
}

Hvad mangler jeg? :(
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 11:37 #8
Jeg forsøgt med en ToList i den indre del af LINQ udtrykket, men får så andre sjove røde streger...
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 11:40 #9
Ahh jeg har sat en .FirstOrDefault() ind til sidst... det hjalp...spørgsmålet er så om FirstOrDefault() er korrekt?
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 11:47 #10
Grrr... nu kommer der Nullreference problemer...tror jeg mangler en new et eller andet sted i udtrykket :(
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 11:51 #11
Nullrefernce problemet er vist et andet sted...jeg får blot een enkel bil sat i ind i listen.
Avatar billede arne_v Ekspert
05. oktober 2012 - 15:06 #12
en IQueryable skal have en ToList for at blive til en List

FirstOrDefault giver altid kun 1
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 15:55 #13
Hvad vil du skrive istedet?
Avatar billede arne_v Ekspert
05. oktober 2012 - 15:57 #14
hvordan ser koden ud nu?
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 17:34 #15
Som længere oppe:

public BilListe HentBilListe(){
    var bilListe = HentData(
    () => Biler.Where(p => p.Aargang == 1990).Select(
            p => new BilListe
                {
                    Biler = new List<Bil>
                        {
                            new Bil
                                {
                                    Id = p.Id,
                                    Model = p.Model,
                                    Maerke = p.Maerke
                                    Aargang = p.Aargang
                                }
                        }
                });
    return bilListe;
}
Avatar billede arne_v Ekspert
05. oktober 2012 - 17:39 #16
Det er ikke helt nemt at gennemskue.

men jeg tror at du leder efter noget a la:

List<Bil> biler = kommeretellerandetstedfra;
List<Bil> biler90 = biler.Where(p => p.Aargang == 1990).ToList();
Avatar billede CodingJoe Nybegynder
05. oktober 2012 - 19:45 #17
public class BilListe
    {
        public List<Bil> Biler { get; set; }
    }

public class Bil
    {
        public int Id { get; set; }
        public string Model { get; set; }
        public string Maerke {get; set; }
        public int Aargang {get; set; }
    }

public BilListe HentBilListe(){
    var bilListe = Biler.Where(p => p.Aargang == 1990).Select(
            p => new BilListe
                {
                    Biler = new List<Bil>
                        {
                            new Bil
                                {
                                    Id = p.Id,
                                    Model = p.Model,
                                    Maerke = p.Maerke
                                    Aargang = p.Aargang
                                }
                        }
                });
    return bilListe;
}
Avatar billede arne_v Ekspert
05. oktober 2012 - 20:04 #18
hvad med:

public BilListe HentBilListe()
{
    return new BilListe { Biler = Biler.Where(p => p.Aargang == 1990).ToList() };
}

?
Avatar billede arne_v Ekspert
05. oktober 2012 - 21:40 #19
Var det loesningen?
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