Operator '||' kann nicht auf Operanden vom Typ 'Lambda-Ausdruck' und 'Lambda-Ausdruck' angewendet werden

8

Wie konstruiere ich eine LINQ WHERE -Klausel, die OR enthält?

Ich habe eine Liste von Objekten, und ich möchte jene zurückgeben, die einem Suchkriterium entsprechen.

Die enthaltenen Objekte haben viele Eigenschaften, und solange any den Kriterien entspricht, möchte ich sie zurückgeben:

%Vor%

Aber das kann nicht kompiliert werden:

  

Operator '||' kann nicht auf Operanden vom Typ 'Lambda-Ausdruck' und 'Lambda-Ausdruck' angewendet werden

Wie konstruiere ich eine LINQ WHERE -Klausel, die OR enthält?

Siehe auch

Ian Boyd 17.01.2012, 19:00
quelle

5 Antworten

16

Mach einfach alle deine Tests im selben Lambda-Ausdruck ...

%Vor%     
Thomas Levesque 17.01.2012, 19:02
quelle
3

Sie versuchen, jede Bedingung in einem separaten Lambda-Ausdruck auszudrücken, der nicht korrekt ist.

Sie möchten alle Ihre Ausdrücke innerhalb eines einzelnen Lambda-Ausdrucks haben:

%Vor%     
Justin Niessner 17.01.2012 19:03
quelle
3

Nur ein anderer Ansatz, den ich für interessant halte; Es ermöglicht eine zusammensetzbare Lösung, wenn Sie es wünschen. Sie können eine Version von Prädikat-Builder verwenden, die für linq-to-objects geändert wurde. So:

%Vor%

Ich habe etwas vom Standardcode abgeschnitten, um nur den Kern der Idee zu zeigen.

Der Linq-zu-Objekte-Prädikat-Builder stammt aus einer Antwort von Jon Skeet. Code hier zur Vollständigkeit geschrieben:

%Vor%     
Paul Phillips 17.01.2012 19:49
quelle
1

Sie können mehrere lambdas nicht kombinieren. Sie möchten einen booleschen Ausdruck basierend auf der Oder-Verknüpfung ( || ) Ihrer Bedingungen in der where -Klausel erstellen:

%Vor%     
BrokenGlass 17.01.2012 19:02
quelle
1

Versuchen Sie, die Lambda-Deklaration bei jedem Vergleich zu entfernen ... etwas wie:

  

var Ergebnisse = Liste.Wohin (         (item = & gt; item.Name.Contains (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase)         ||         item.Description.Contains (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase)         ||         item.Description.Contains (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase)         ||         item.ItemType.Contains (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase)         ||         item.ItemID.ToString (). StartsWith (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase)         ||         items.Value.ToString (). StartsWith (Schlüsselwort, StringComparison.CurrentCultureIgnoreCase));

    
Xtian Macedo 17.01.2012 19:04
quelle

Tags und Links