Announcement

Collapse
No announcement yet.

LInQ - abfrage

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

  • LInQ - abfrage

    Hallo zusammen,

    kann mir jemand helfen ...

    ich versuche per LINQ in der abfrage auf einen darauffolgenden datensatz zuzugreifen ... um dessen inhalt ins abgefragte ergebniss zu integrieren :-)

    [highlight=vbnet]

    Dim query From dtV in MyData
    Let IDakt = dtv.ID
    Let wert1 = dtv.Wert ' beispielhaft
    Let IDplus = IDakt+1
    Let wert2 = new with{???? where dtv.ID = IDplus}.Wert


    [/highlight]

    sprich: wenn z.b. Datensatz 10 ... den WERT 5 hat
    würde ich gerne abfragen können...
    welchen wert der aktuelle datensatz plus (z.b) der nächste hat

    mir gehts grundsätzlich erstmal darum zu wissen ... welche "function" hier
    sinnvoll ist ... ohne 2 x die kommpletten daten durchlaufen zu müssen

    vielen dank für nen tipp :-)


    NACHTRAG:

    oder ne BESSERE lösung als LInQ... ich versuche sehr viele daten grundsätzlich im code erstmal
    zu ändern und ganz zu letzt diese erst zu speichern ....
    allein schon ... dass LINQ nicht zu debuggen ist ... geht mir *mildeausgedrückt* auf den keks :-)
    Zuletzt editiert von Fremder; 31.03.2010, 12:15.
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

  • #2
    allein schon ... dass LINQ nicht zu debuggen ist ... geht mir *mildeausgedrückt* auf den keks :-)
    Das selbe Problem wie bei SQL. LINQ ist eher eine deklarative Sprache und nicht imperativ. Heißt du beschreibst das Ergebnis einer Abfrage mit LINQ nicht den Algorithmus wie du an die Daten kommst. Ohne Algorithmus keine schrittweise Änderung eine Status und damit keinen sinnvolle Möglichkeit des Debuggens.

    Wo wir gerade bei SQL sind. Dein Problem lässt sich wohl nur über die selbe Methode wie in SQL lösen. Du brauchst einen Self-Join.

    Comment


    • #3
      Eine eigene For-Each-Schleife ist einem Linq-Ausdruck überlegen, wenn es um's Debuggen geht. Ansonsten ist es ja möglich, in einem Linq-Ausdruck auch auf andere Zeilen als die gerade aktuelle loszugehen, wie das nachfolgende Beispiel zeigt:

      [highlight=vbnet]Public Class Class1
      Private Sub LinqTest()
      Dim dt As New DataTable
      dt.Columns.Add(New DataColumn("Column1", GetType(Integer)))

      For index As Integer = 0 To 9
      dt.LoadDataRow(New Object() {index}, True)
      Next

      Dim query As Object = From row As DataRow In dt.Rows _
      Let selectedIndexOf As Integer = dt.Rows.IndexOf(row) + 1 _
      Where (row(0) And 1) = 1 AndAlso selectedIndexOf < dt.Rows.Count _
      Select dt.Select("Column1>" & dt.Rows(selectedIndexOf)(0))
      End Sub
      End Class[/highlight]

      Comment


      • #4
        ja ... so wirds sein ...


        ich habs mal anhand deines beispiels versucht und zum ziel bin ich schon gekommen ...
        Code:
              Dim dataList As New List(Of myDatas)
                Dim nDate As Date = #10/10/2010 12:20:00 PM#
        
        
        
                For i As Integer = 0 To 50
        
                    Dim data As New myDatas
                    nDate = nDate.AddMinutes(1)
                    data.Datum = nDate
                    data.myID = i
                    dataList.Add(data)
                Next
        
        
            
                Dim query = From r As myDatas In dataList _
                            Where r.myID < dataList.Count - 2 _
                            Let selectID As Integer = dataList(r.myID).myID + 1 _
                            Let selDate As Date = dataList(selectID).Datum _
                            Let aktID = r.myID, aktDatum = r.Datum _
                            Select aktID, aktDatum, idPlus1 = selectID, DatumP1 = selDate
        
        
        
                dgv2.DataSource = query.ToList
        
        
        Class myDatas
            Friend myID As Integer
            Friend Datum As Date
        End Class
        jetzt hoff ich mal ... dass dies nicht auf performance starke auswirkungen hat :-)

        DANKE
        Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
        Um heute vorm PC zu sitzen!

        Comment

        Working...
        X