Hilfestellung Linq-Abfrage

  • VB.NET

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

    Hilfestellung Linq-Abfrage

    Hallo,

    bei folgender Linq-Abfrage würde ich mich über Hilfestellung freuen:

    VB.NET-Quellcode

    1. Public Property FilterCar As Integer
    2. Dim filteredMeasurements = From measure In dcBending.Bending_Kopf
    3. Where measure.Datum >= FilterDateStart.AddHours(-FilterDateStart.Hour).AddMinutes(-FilterDateStart.Minute) And measure.Datum <= FilterDateEnd
    4. Where measure.Article.Contains(FilterArticle)
    5. Where measure.Shape.Contains(FilterShape)
    6. Where measure.TOW = FilterCar
    7. Order By measure.Datum Descending
    8. Take 500


    Und zwar geht es um die Zeile 'Where measure.TOW = FilterCar'. FilterCar ist entweder irgendeine Zahl oder 0. Bei 0 möchte ich diesen Filter quasi deaktivieren, so dass das Endergebnis unabhängig von measure.TOW ist.
    MfG
    Peterle
    @Peterle
    Wieso kontrollierst du es nicht einfach im Programm ob FilterCar 0 ist oder nicht und jenachdem machst du einen anderen filteredMeasurements.
    Nach meiner Meinung ist das mit einem If Else zu lösen.

    Wenn ich die Frage falsch verstanden habe, entschuldige ich mich.
    Hallo

    du solltest ja ein IQueryable zurückbekommen. Der vorteil ist das dieses kombiniert werden kann.
    Es ginge zwar innerhalb dieser einen abfrage aber ich finde es immer schöner das Query "zusammen zu basteln".

    z.b.:

    VB.NET-Quellcode

    1. Dim filteredMeasurements = From measure In dcBending.Bending_Kopf
    2. Where measure.Datum >= FilterDateStart.AddHours(-FilterDateStart.Hour).AddMinutes(-FilterDateStart.Minute) And measure.Datum <= FilterDateEnd
    3. Where measure.Article.Contains(FilterArticle)
    4. Where measure.Shape.Contains(FilterShape)
    5. Order By measure.Datum Descending
    6. Take 500
    7. If FilterCar > 0 then
    8. filteredMeasurements = filteredMeasurements .Where(Function(x) x.measure.TOW = FilterCar)
    9. End If
    10. 'Ergebnis
    11. Dim result = filteredMeasurements.ToList()


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Peterle schrieb:

    Außerdem habe ich schon zu viel rumprobiert

    Zu viel rumprobiert? Das gibt es nicht.

    Ich glaube aber eher, dass es keine Lösung dafür gibt, weil man so von der Abfrage auf sich selber zugreift und so entsprechend die Abfrage ändert. Das sollte man nicht tun, weil man nachher wirklich nicht weiss, was drin steht. Man kann es also nicht kontrollieren.

    Wieso reicht dir ein If Else nicht?

    __________________________
    Ups. Ein bisschen zu spät.
    Ich hab noch nie in Linq Where mit Where verkettet - ich verwende da immer AndAlso. Daher bin ich nicht sicher, ob folgendes Werk in richtiger Weise funzt, aber probierma:

    VB.NET-Quellcode

    1. Dim filteredMeasurements = From measure In dcBending.Bending_Kopf
    2. Where FilterCar = 0 OrElse (
    3. measure.Datum >= FilterDateStart.AddHours(-FilterDateStart.Hour).AddMinutes(-FilterDateStart.Minute)
    4. AndAlso measure.Datum <= FilterDateEnd
    5. AndAlso measure.Article.Contains(FilterArticle)
    6. AndAlso measure.Shape.Contains(FilterShape)
    7. AndAlso measure.TOW = FilterCar)
    8. Order By measure.Datum Descending
    9. Take 500