none
Entity Framework -> Linq mit Unterabfragen, wie caste ich das ganze in eine existierende Klasse? RRS feed

  • Frage

  • Hello,

    Ich habe für meine Zwecke eine eigene Klasse erzeugt:
        public class Kategorie
    
        {
    
            public int katNr { get; set; }
    
            public string katName { get; set; }
    
            public int vaterKatNr { get; set; }
    
            public List<Kategorie> unterkategorie { get; set; }
    
        }
    
    
    Und wollte mittels der unten aufgeführten Query das Ergebnis als List<Kategorie> auf die Client Seite zurückgeben.
                    argusCmoEntities reportEntitäten = new argusCmoEntities(access.GetEntityFrameworkConnection("CMO", "metadata=res://*/CMO.csdl|res://*/CMO.ssdl|res://*/CMO.msl"));
    
    
    
                    var kategorien = (from a in reportEntitäten.aw_katBaum
    
                                            where a.abo_nr_intern == aboNr && a.vaterKategorie_nr == null
    
                                            select new
    
                                            {
    
                                                katName = a.katBezeichnung.Trim(),
    
                                                katNr = a.kategorie_nr,
    
                                                vaterKatNr = -1,
    
                                                unterkategorie =
    
                                                    //stufe 1
    
                                                (
    
                                                    from a2 in reportEntitäten.aw_katBaum
    
                                                    where a2.abo_nr_intern == aboNr && a2.vaterKategorie_nr == a.kategorie_nr
    
                                                    select new
    
                                                    {
    
                                                        katName = a2.katBezeichnung.Trim(),
    
                                                        katNr = a2.kategorie_nr,
    
                                                        vaterKatNr = a.kategorie_nr,
    
                                                        unterkategorie =
    
                                                        (
    
                                                            //stufe 2
    
                                                            from a3 in reportEntitäten.aw_katBaum
    
                                                            where a3.abo_nr_intern == aboNr && a3.vaterKategorie_nr == a2.kategorie_nr
    
                                                            select new
    
                                                            {
    
                                                                katName = a3.katBezeichnung.Trim(),
    
                                                                katNr = a3.kategorie_nr,
    
                                                                vaterKatNr = a2.kategorie_nr,
    
                                                                unterkategorie =
    
                                                                (
    
                                                                    //stufe 3
    
                                                                  from a4 in reportEntitäten.aw_katBaum
    
                                                                  where a4.abo_nr_intern == aboNr && a4.vaterKategorie_nr == a3.kategorie_nr
    
                                                                  select new
    
                                                                  {
    
                                                                      katName = a4.katBezeichnung.Trim(),
    
                                                                      katNr = a4.kategorie_nr,
    
                                                                      vaterKatNr = a3.kategorie_nr,
    
                                                                      unterkategorie =
    
                                                                      (
    
                                                                          // stufe 4
    
                                                                       from a5 in reportEntitäten.aw_katBaum
    
                                                                       where a5.abo_nr_intern == aboNr && a5.vaterKategorie_nr == a4.kategorie_nr
    
                                                                       select new
    
                                                                       {
    
                                                                           katName = a5.katBezeichnung.Trim(),
    
                                                                           katNr = a5.kategorie_nr,
    
                                                                           vaterKatNr = a4.kategorie_nr,
    
                                                                           unterkategorie =
    
                                                                           (
    
                                                                               from a6 in reportEntitäten.aw_katBaum
    
                                                                               where a6.abo_nr_intern == aboNr && a6.vaterKategorie_nr == a5.kategorie_nr
    
                                                                               select new
    
                                                                               {
    
                                                                                   katName = a6.katBezeichnung.Trim(),
    
                                                                                   katNr = a6.kategorie_nr,
    
                                                                                   vaterKatNr = a5.kategorie_nr
    
                                                                               }
    
                                                                           )
    
                                                                       }
    
                                                                      )
    
                                                                  }
    
                                                                )
    
                                                            }
    
                                                        )
    
                                                    }
    
                                                     )
    
                                            }
    
                                             );
    
    
    Ich habe schon einiges ausprobiert

    List<Kategorie> kategorien = (from a in reportEntitäten.aw_katBaum
    
                                            where a.abo_nr_intern == aboNr && a.vaterKategorie_nr == null
    
                                            select new Kategorie
    
                                            {
    
                                                katName = a.katBezeichnung.Trim(),
    
                                                katNr = a.kategorie_nr,
    
                                                vaterKatNr = -1,
    
                                                unterkategorie =
    
                                                    //stufe 1
    
                                                (
    
                                                    from a2 in reportEntitäten.aw_katBaum
    
                                                    where a2.abo_nr_intern == aboNr && a2.vaterKategorie_nr == a.kategorie_nr
    
                                                    select new Kategorie
    
                                                    {
    
                                                        katName = a2.katBezeichnung.Trim(),
    
                                                        katNr = a2.kategorie_nr,
    
                                                        vaterKatNr = a.kategorie_nr,
    
                                                        unterkategorie =
    
                                                        (
    
                                                            //stufe 2
    
                                                            from a3 in reportEntitäten.aw_katBaum
    
                                                            where a3.abo_nr_intern == aboNr && a3.vaterKategorie_nr == a2.kategorie_nr
    
                                                            select new Kategorie
    
                                                            {
    
                                                                katName = a3.katBezeichnung.Trim(),
    
                                                                katNr = a3.kategorie_nr,
    
                                                                vaterKatNr = a2.kategorie_nr,
    
                                                                unterkategorie =
    
                                                                (
    
                                                                    //stufe 3
    
                                                                  from a4 in reportEntitäten.aw_katBaum
    
                                                                  where a4.abo_nr_intern == aboNr && a4.vaterKategorie_nr == a3.kategorie_nr
    
                                                                  select new Kategorie
    
                                                                  {
    
                                                                      katName = a4.katBezeichnung.Trim(),
    
                                                                      katNr = a4.kategorie_nr,
    
                                                                      vaterKatNr = a3.kategorie_nr,
    
                                                                      unterkategorie =
    
                                                                      (
    
                                                                          // stufe 4
    
                                                                       from a5 in reportEntitäten.aw_katBaum
    
                                                                       where a5.abo_nr_intern == aboNr && a5.vaterKategorie_nr == a4.kategorie_nr
    
                                                                       select new Kategorie
    
                                                                       {
    
                                                                           katName = a5.katBezeichnung.Trim(),
    
                                                                           katNr = a5.kategorie_nr,
    
                                                                           vaterKatNr = a4.kategorie_nr,
    
                                                                           unterkategorie =
    
                                                                           (
    
                                                                               from a6 in reportEntitäten.aw_katBaum
    
                                                                               where a6.abo_nr_intern == aboNr && a6.vaterKategorie_nr == a5.kategorie_nr
    
                                                                               select new Kategorie
    
                                                                               {
    
                                                                                   katName = a6.katBezeichnung.Trim(),
    
                                                                                   katNr = a6.kategorie_nr,
    
                                                                                   vaterKatNr = a5.kategorie_nr
    
                                                                               }
    
                                                                           ).ToList()
    
                                                                       }
    
                                                                      ).ToList()
    
                                                                  }
    
                                                                ).ToList()
    
                                                            }
    
                                                        ).ToList()
    
                                                    }
    
                                                     ).ToList()
    
                                            }
    
                                             ).ToList();
    
    

    Allerdings erhalte ich dann diese Exception:

    -  base {"LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[Argus.CMOData.Kategorie] ToList[Kategorie](System.Collections.Generic.IEnumerable`1[Argus.CMOData.Kategorie])' method, and this method cannot be translated into a store expression."} System.SystemException {System.NotSupportedException}

    Und ich weiss im Moment nicht wie ich mein Ergebnis z.B. in var Kategorie vernünftig umwandeln kann um daraus eine List<Kategorie> zu erhalten die beliebig oft verschachtelt ist :-(

    Habt ihr eine Idee?

    Danke!
    • Bearbeitet Bibi1911 Mittwoch, 17. Februar 2010 13:19 Hatte angenommen, dass ich auf Englisch posten muss
    Mittwoch, 17. Februar 2010 12:59

Antworten

Alle Antworten