Dynamisches LinQ Statement und Where Abfrage
-
Freitag, 6. April 2012 13:58
Hallo!
Folgende Situation, ich habe ein Master-Child Szenario.
Kunden -> AufträgeIch möchte für eine Werbeafrage ein dynamisches LinQ aufbauen, was eigentlich nicht so schwer sein sollte, aber ich bekomme es nicht hin...
Folgende Situation:
Dim myKunden = From Kunde In myDataContext.Kundenstamms Order By Kunde.Nname, Kunde.Vname
Von dieser Grundabfrage möchte ich jetzt, je nach dem ob eine Option angehackt ist, oder nicht Where Abfragen einbauen:
If rdbOffen.Checked = True Then myKunden = myKunden.Where(Function(kunde) kunde.Auftrags.Where(Function(auftrag) auftrag.Bewegung = 0)) ElseIf rdbFakturiert.Checked = True Then myKunden = myKunden.Where(Function(kunde) kunde.Auftrags.Where(Function(auftrag) auftrag.Bewegung = 1)) End IfDas Problem ist, dass ich eine Fehlermeldung bei ".Where(..." bekomme:
Fehler 2 Fehler bei der Überladungsauflösung, da keine zugreifbare "Where" mit diesen Argumenten aufgerufen werden kann: In "System.Linq.Queryable" definierte Erweiterungsmethode "Public Function Where(predicate As System.Linq.Expressions.Expression(Of System.Func(Of VOptNeuContext.Kundenstamm, Integer, Boolean))) As System.Linq.IQueryable(Of VOptNeuContext.Kundenstamm)": Die Signatur der geschachtelten Funktion ist nicht mit dem Delegaten "System.Func(Of VOptNeuContext.Kundenstamm, Integer, Boolean)" kompatibel. In "System.Linq.Queryable" definierte Erweiterungsmethode "Public Function Where(predicate As System.Linq.Expressions.Expression(Of System.Func(Of VOptNeuContext.Kundenstamm, Boolean))) As System.Linq.IQueryable(Of VOptNeuContext.Kundenstamm)": Der Wert vom Typ "System.Collections.Generic.IEnumerable(Of VOPT.VOptNeuContext.Auftrag)" kann nicht in "Boolean" konvertiert werden. In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Where(predicate As System.Func(Of VOptNeuContext.Kundenstamm, Integer, Boolean)) As System.Collections.Generic.IEnumerable(Of VOptNeuContext.Kundenstamm)": Die Signatur der geschachtelten Funktion ist nicht mit dem Delegaten "System.Func(Of VOptNeuContext.Kundenstamm, Integer, Boolean)" kompatibel. In "System.Linq.Enumerable" definierte Erweiterungsmethode "Public Function Where(predicate As System.Func(Of VOptNeuContext.Kundenstamm, Boolean)) As System.Collections.Generic.IEnumerable(Of VOptNeuContext.Kundenstamm)": Der Wert vom Typ "System.Collections.Generic.IEnumerable(Of VOPT.VOptNeuContext.Auftrag)" kann nicht in "Boolean" konvertiert werden.
Wie kann ich das Problem sonst lösen? - DANKE für jeden Tipp! - Frohes Osterfest...
Alle Antworten
-
Freitag, 6. April 2012 14:10
Macht Any statt Where, also
If rdbOffen.Checked = True Then myKunden = myKunden.Where(Function(kunde) kunde.Auftrags.Any(Function(auftrag) auftrag.Bewegung = 0)) ElseIf rdbFakturiert.Checked = True Then myKunden = myKunden.Where(Function(kunde) kunde.Auftrags.Any(Function(auftrag) auftrag.Bewegung = 1)) End Ifdas, was du erreichen willst? Das selektierte dann alle Elemente in myKunden, für die mindestens ein Auftrag in kunde.Auftrags existiert, für den die Eigenschaft Bewegung "1" bzw. "0" ist.
Ansonsten musst du mal genauer erklären, was du abfragen willst und die deine Klassen aussehen, die du abfragen willst.
MVP Data Platform Development My blog
- Als Antwort markiert Zero-G. _ Freitag, 6. April 2012 15:07
-
Freitag, 6. April 2012 15:07
Hey Martin!
DANKE - Das wars, wonach ich suchte - Schönen DANK

