Ich habe ein Szenario, in dem ich eine SQL-Abfrage mit LINQ erstellen muss, die eine variable Anzahl von OR-Klauseln enthält. Ich schreibe eine Funktion, die die Abfrage basierend auf einigen Eingaben erstellen wird. Die Funktionsdefinition sieht so etwas wie ...Wie verketten Sie OR-Klauseln mit LINQ?
function BuildQuery(ICollection<ColumnsThatNeedToBeTrue> columns)
{
...
}
Also, ich bin eine Sammlung von Spalten gegeben, die ich für wahr überprüfen müssen, und die Prüfung muss OR
Klauseln verwenden.
Wenn die columns
Array enthält A
und B
, würde ich die Abfrage müssen überprüfen, ob Spalte A
wahr ist oder Spalte B
ist wahr.
Wenn die columns
Array A
enthält, B
und C
, würde ich brauchen abfragen und zu überprüfen, ob A
OR B
OR C
wahr sind.
Ich weiß nicht, wie das alles innerhalb einer einzigen Where
zu tun, weil ich keine Möglichkeit weiß, schrittweise auf zusätzliche ||
Klauseln zu kleben. Ich bin mir nicht sicher, wie ich im Folgenden, basierend auf dem Eingabearray, zusätzliche ODER-Prüfungen einschließe.
var query = entities.Where(m => m.A == true || m.B == true ...)
Ich kann nicht Kette Where
Funktionen, die jeweils für ihre eigene Spalte zu überprüfen, weil es diese Abfrage mit AND
Klauseln baut und ich brauche OR
.
Gibt es eine Möglichkeit, eine Abfrage wie diese mit LINQ zu erstellen?
In-Klausel? http://stackoverflow.com/questions/959752/where-in-clause-in-linq –
Vielleicht würde "UNION" Ihnen helfen? –
Ich glaube nicht, dass es funktionieren wird, weil diese Dinge im SQL alle einzelne Spalten sind. In meiner EF-Entitätsklasse werden diese Spalten als 'bool'-Eigenschaften für jede Spalte dargestellt. Als Eingabe für meine Funktion habe ich ein Array von 'enum' angegeben, das angibt, welche Spalte auf True geprüft werden soll. Es gibt also kein echtes Array zum Vergleichen - nur einzelne Bool-Spalten/Eigenschaften. – Ryan