Announcement

Collapse
No announcement yet.

Linq direkt in Class(e) ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Linq direkt in Class(e) ausgeben

    Muss leider mal wieder sehr naiv fragen (ob ich total falsch liege) ... und mit den klassischen
    LINQ beispielen @google etc. komm ich leider gar nicht zurecht ...


    Besteht die Möglichkeit:

    a) eine Linq-Abfrage "PUBLIC" zu setzen (um immer wieder auf dieselbe Abfrage zugreifen zu können?

    Code:
    Public myLBasis as LinqDings
    
    Sub a()
    
                    myLBasis = From C1 In myChart1 _
                         Join C2 In myChart2 _
                         On C1.myIds(1) Equals C2.myCount _
                         Join C3 In myChart3 _
                         On C1.myIds(2) Equals C3.myCount _
                         Let Id1 = C1.myIndex(1, 0), Id2 = C2.myIndex(1, 0), Id3 = C3.myIndex(1, 0), _
                         Grouping = Id1 & Id2 & Id3, altID = C1.myCount - 1
    
    End Sub


    b) das ergebniss der linq-abfrage direkt umzusetzen ...
    Code:
        Dim neuList as New listX
        
        neuList = From LQ as listX in alterListe Where ........
    oder ist es "normal" nach der Abfrage einfach eine for next schleife zum füllen herzunehmen ?

    danke :-)
    Zuletzt editiert von Fremder; 06.04.2010, 15:57.
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

  • #2
    a) prinzipiell möglich; zu beachten: z.B. nach einem myChart1 = New myChart verbleibt im Linq-Ausdruck immer noch die alte Referenz

    b) merkwürdiges Konstrukt: wenn ohnehin eine erneute Zuweisung ist ein New in Deklaration nicht erforderlich und: der Type des Ergebnisses der Linq-Anweisung ist nicht vom Type listX. Wenn man eine Liste von Objekten will dann sieht das so aus:

    [highlight=vbnet]Dim myList As List(Of listX) = (From LQ As listX In alterListe
    Select LQ).ToList[/highlight]

    Comment


    • #3
      zu b) "merkwürdiges Konstrukt" ... jo ... genau so hoffte ich ... es zu ermöglich - danke (mal wieder)





      zu a) wenns denn möglich ist/wäre ... wie muss ich dann

      Code:
      Public myBasisLinq as Query  ' ?
      definieren ?

      ' fündig ... unter "Kompilierte Abfragen" geworden ... puu ... (nur leider nicht ganz so
      "einfach" zu erstellen :-)



      ... beim "lesen" zu linq heisst es ja stets FETT/UNTERSTRICHEN, dass
      LINQ eben sehr gut nacheinander geschachtelt werden kann ...

      ich hab z.B. anfangs eine recht komplizierte "Join" mit 3 Tabellen .... diese lasse ich
      erst mal "jungfräulich" ...

      Code:
      ' reine Theorie
      Public mylBasis
      Sub Load()
      
           myLBasis = From C1 In myChart1 _
                           Join C2 In myChart2 _
                           On C1.myIds(1) Equals C2.myCount _
                           Join C3 In myChart3 _
                           On C1.myIds(2) Equals C3.myCount _
                           Let Id1 = C1.myIndex(1, 0), Id2 = C2.myIndex(1, 0), Id3 = C3.myIndex(1, 0), _
                           Grouping = Id1 & Id2 & Id3, altID = C1.myCount - 1
      
      end Sub
      
      Sub test1()
      
      Dim test1LQ = From mLB in myLBais Where mlB.Grouping = 1234
      
      end Sub
      Sub test2()
      
         Dim myGroup1 = From C In myLBasis _
                             Let grX = IIf((C.C1.myCount - C.altID) < 1, 100, C.Grouping) _
                   Group By grX, C.Id1, C.Id2, C.Id3 Into Count(), Guv1 = Sum(C.C1.myGuV1), Guv2 = Sum(C.C1.myGuV2), GuvABS2 = Sum(Math.Abs(C.C1.myGuV2)) _
                   Select Grouping = grX, Id1, Id2, Id3, Guv1, Guv2, GuvABS2, PF1 = CSng(Guv1 / Count), PF2 = CSng(Guv2 / Count), PFabs2 = CSng(GuvABS2 / Count), Count, Art = CSng(0), GRange = CSng(0)
      
      
      
      end Sub

      wenn ich die "BasisDaten" von myLBasis in eine Liste oder Array kopiere
      hätte ich da erstmal ziemlich viele daten drin :-)

      danke zweitmals :-)
      Zuletzt editiert von Fremder; 07.04.2010, 16:37.
      Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
      Um heute vorm PC zu sitzen!

      Comment

      Working...
      X