2011-07-14 6 views
1

Il est tard ici et je ne peux pas voir la forêt pour les arbres.Sélectionner des données hiérarchiques via Linq2SQL

Je suis en train de sélectionner des données hiérarchiques avec l'approche suivante:

return 
    from line in data 
    group line by line.LieferscheinNr into g 
    let kpf = g.First() 
    select new DESSK1 
    { 
     K1LINK = MakeDfuePartnerID(kpf.Land, kpf.VerbandNr), 
     K1LSNR = kpf.LieferscheinNr, 
     K1LSDT = decimal.Parse(kpf.LieferscheinDatum.ToString("ddMMyyyy")), 
     K1ILNW = kpf.IlnLieferanschrift, 
     K1ILNH = kpf.IlnKunde, 
     K1ILNL = kpf.IlnMandant, 
     K1CPSD = 1, 
     K1ILNB = kpf.IlnKunde, 
     K1VSDT = decimal.Parse(kpf.LieferDatum.ToString("ddMMyyyy")), 
     K1BSTN = kpf.BestellNr, 

     // this is where the compiler complains 
     DESSP2 = from pos in g 
       select new DESSP2 
       { 
        P2LSNR = pos.LieferscheinNr, 
        P2POSN = pos.Pos, 
        P2EAN = pos.EAN, 
        P2LMG = pos.Menge, 
        P2BMG = pos.MengeSoll 
       } 
    }; 

Je pense que vous pouvez voir ce que je suis en train ici, mais il échoue depuis DESSP2 est de type System.Data.Link.EntitySet<DESSP2> et la requête est de type IEnumerable<DESSP2>.

Il doit y avoir un chemin facile de IEnumerable<T> à EntitySet<T> mais je ne peux pas en voir un.

Des idées?

Répondre

0

Ah, je savais que c'était facile. En réfléchissant à la façon de remplir le EntitySet dans la requête que je trouve cette solution parfaitement travail:

How do you cast an IEnumerable<t> or IQueryable<t> to an EntitySet<t>?

Je me demande pourquoi la méthode ToEntitySet() ne fait pas partie de la langue. Cela me semble un problème habituel si vous voulez remplir des tables linq hiérachiques.

La partie pertinente ressemble maintenant à ceci:

DESSP2 = (from pos in g 
      select new DESSP2 
      { 
       P2LSNR = pos.LieferscheinNr, 
       P2POSN = pos.Pos, 
       P2EAN = pos.EAN, 
       P2LMG = pos.Menge, 
       P2BMG = pos.MengeSoll 
      }).ToEntitySet() 
Questions connexes