linq select Frage

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von vb_fan.

    linq select Frage

    Hallo,

    ich habe diesen Code hier:

    VB.NET-Quellcode

    1. Dim query = _Test.Tables(0).Rows.Select(Function(Row) Row.Item(2))
    2. For Each item In query
    3. _OutputDataTable.Rows.Add(item)
    4. Next


    _Test.Tables(0).Rows ist eine List Of DataRow.

    Mit dem obigen Code bekomme ich das 3. Feld jedes DataRows. Das füge ich der _OutputDataTable hinzu (die beinhaltet dementsprechend nur eine Column). Sie ist nur für die Ausgabe in einer dgv wichtig, für die Frage hat sie keine Relevanz.

    Meine Frage wäre, wie sollte ich die Funktion im Select so ändern, dass ich beliebig viele Felder im DataRow selektieren kann? Ich meine, es kann sein, dass ich in einem Fall 2 Felder brauche, in einem anderen z. B. 5.

    Ist das möglich?

    Theoretisch könnte ich machen, dass ich alle Felder selektiere (mit ItemArray) und dann die Spalten in der Outputtabelle wegschmeisse, die ich nicht brauche. Aber das möchte ich nicht.

    Danke.
    ok, das habe ich nicht explizit geschrieben: die Indexe kommen aus einem anderen Codeteil. Ist aber nicht relevant. Es geht hier bloß darum, wie ich die Felder so selektieren kann, dass die Zahl der Felder sich ändern kann.

    Also vor dem Aufruf der Code habe ich schon die Indexe der Felder, die ich brauchen werde. Und diese Indexe müssten jetzt irgendwie eingebaut werden. Sagen wir mal, die Indexe sind in einer einfachen Array. Wie würde dann die select Funktion aussehen?

    O. ich schreibe meine eigene Extension zu DataRow, dass der ItemArray Property z. B. so aufgerufen werden kann: Row.ItemArray(0, 2, 3).

    VB.NET-Quellcode

    1. Dim query = _Test.Tables(0).Rows.SelectMany(Function(Row) FieldIndex.Select(Function(i) Row.Item(i)))
    2. 'oder
    3. Dim query = _Test.Tables(0).Rows.Select(Function(Row) FieldIndex.Select(Function(i) Row.Item(i)).toarray)
    (Die Anforderung ist nicht eindeutig definiert)
    skip und take sind leider nicht das, was ich suche

    aber

    VB.NET-Quellcode

    1. Dim query = _Test.Tables(0).Rows.Select(Function(Row) FieldIndex.Select(Function(i) Row.Item(i)).ToArray)


    tut das, was er tun soll.

    Habe ganz vergessen, dass es auch verschachtelte linq queries gibt.