Ich habe eine Datenbanktabelle, die "Befehle" und "states" enthält. Jeder Befehl kann mehrere Zustände haben, und der Benutzer kann dies bei der Suche konfigurieren. Zum Beispiel könnte der Befehl "Ausführen" sein und er könnte zwei Zustände haben: "Schnell" und "Langsam".Erweiterte Datenbanksuche mit linq-to-sql help
Ich möchte meine Tabelle nach allen Befehlen suchen, die "Run" mit "Fast" oder "Slow" genannt werden. Das ist ziemlich einfach zu tun:
var results = from t in table
where t.Command == "Run" &&
(t.State == "Fast" || t.State == "Slow")
return t;
jedoch der Benutzer auch Befehl „Walk“ mit Zustand „Fast“, und so die Abfrage würde so aussehen suchen könnte:
var results = from t in table
where (t.Command == "Run" &&
(t.State == "Fast" || t.State == "Slow")) ||
(t.Command == "Walk" &&
t.State == "Fast")
return t;
Es gibt ein Potenzial für So viele Suchen wie diese, und ich frage mich, wie man sie in einer Art Schleife kombinieren kann.
Ich kann das nicht tun:
foreach(var command in commands)
{
foreach(var state in command.states)
{
results = from t in table
where t.Command == command.Command &&
t.State == state;
}
}
weil, sobald es für „Run“ sucht, „Walk“ aus Ergebnissen gelassen werden würde, so zu fragen für „Weg“ in keinen Ergebnissen alle zur Folge hätte.
Kennt jemand eine gute Möglichkeit, dies zu tun?
+1 Snap - fast :) –
dies tatsächlich sehr aktuell ist (das Prädikat builder) als ich humpelte von spät aggregieren where clauses - nice find. Wie ist dein Erfolg damit verbunden? –
@jim: Ich hatte eigentlich noch keine Notwendigkeit dafür. Das meiste von dem, was wir tun, ist entweder einfach genug, um es nicht zu brauchen, oder fortgeschritten genug, dass ich den ganzen Ausdrucksbaum trotzdem von Hand bauen muss. Wenn Sie PredicateBuilder verwenden, sollten Sie sich LinqKit im Allgemeinen ansehen. Es hat einige praktische Funktionen zum Aufrufen von Prädikaten und Dingen. – StriplingWarrior