[LINQ] Query nachträglich verändern

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Mathy.

    [LINQ] Query nachträglich verändern

    Hey zusammen,

    ich brauche etwas Unterstützung bei dem folgendem Abschnitt:

    Quellcode

    1. if x = y then
    2. lUntergruppen = From Gruppen In lUntergruppen
    3. Where Gruppen.ObergruppenName.ToLower.Contains(iGruppe.ToLower)
    4. Select Gruppen.UntergruppenID, Gruppen.UntergruppenName, Gruppen.ObergruppenID, Gruppen.ObergruppenName
    5. end if


    Wenn nun ein die obere if-Abfrage erfüllt ist, soll die vorhandene Query um eine Where Clause erweitert werden. (Im Prinzip sagt die komplette funktion: "Gib mir alle Werte der Tabelle, außer wenn ein String angegeben ist. Dann bitte nur die Werte, die diesen String in Feld X haben.)

    Allerdings kann ich anscheinend nicht die selbe Variable mit einer veränderte Query füllen. Habt ihr Vorschläge?

    Mathy

    EDIT: Entschuldigt für die Formatierung, aber anders geht es scheinbar nicht.
    Wie kann ich denn den den Where-Abschnitt hinzufügen? Ich wollte eigentlich das Ergebnis der Query Auswerten, um eine Where Clause erweitern und wieder in die selbe Variable schreiben, damit ich den späteren Code mit gerade dieser.

    Etwa so..

    Quellcode

    1. x = irgendeine Query
    2. if ?? then
    3. x = x + where-clause
    4. end if
    5. for each item in x
    6. ' mach irgendwas damit..
    7. next


    Allerdings bekomme ich auf diese Art und Weise eine Fehlermeldung bei der Zuweisung.

    Und alles nacheinander zuweisen funktioniert auch nicht..:

    Quellcode

    1. x = from a
    2. x += where b
    3. x += select a


    Ich selektiere in diesem Fall die einzelnen Felder, damit ich weniger Daten verarbeiten muss, denn die Datenbank ist riesig.
    Tabellen:
    ProduktObergruppe mit -> ID, Name
    ProduktUntergruppe mit -> ID, Name, ProduktObergruppeID

    VB.NET-Quellcode

    1. ' Funktion hat Parameter Optional iGruppe as String = ""
    2. Dim lUntergruppen = From oGruppen In ProduktObergruppe
    3. Join uGruppen In ProduktUntergruppe On oGruppen.ID Equals uGruppen.ProduktObergruppeID
    4. Where oGruppen.NAME.ToLower.Contains(iGruppe.ToLower)
    5. Select New With {
    6. .UntergruppenID = uGruppen.ID,
    7. .UntergruppenName = uGruppen.NAME,
    8. .ObergruppenID = oGruppen.ID,
    9. .ObergruppenName = oGruppen.NAME
    10. }
    11. if Not iGruppe = "" then
    12. lUntergruppen = From Gruppen in lUntergruppe
    13. Where Gruppen.ObergruppenName.ToLower.Contains(iGruppe.ToLower)
    14. end if
    das kompiliert doch bei mir nicht.
    Ich werd doch jetzt nicht ein typisiertes Dataset aufsetzen, damit ich ühaupt für dich experimentieren kann.

    naja - hier etwas vergleichbares:

    VB.NET-Quellcode

    1. Dim strings = "Das ist das Haus vom Nikolaus".Split
    2. Dim q = From s In strings Select s.Length, s
    3. Dim res = q.ToArray
    4. q = From itm In q Where itm.Length > 3
    5. res = q.ToArray
    Ich kann allerdings auch schlecht mein Projekt inklusive Datenbank hier online stellen.

    Ich bin dennoch zum Dank verpflichtet! Ich habe das Problem nun dank dir gelöst. Ich darf beim 2. Aufruf lediglich keine weitere Selektierung durchführen.

    Danke Schön!