Suche über alle Felder einer Entität

Ich versuche, die Implementierung eines "omnibox"-Typ suchen, über eine Kunden-Datenbank, wo eine einzelne Abfrage sollte versuchen, entsprechen alle Eigenschaften eines Kunden.

Hier einige Beispiel-Daten, um zu verdeutlichen, was ich versuche zu erreichen:

FirstName  | LastName  | PhoneNumber | ZipCode | ...
--------------------------------------------------
Mary       | Jane      | 12345       | 98765   | ...
Jane       | Fonda     | 54321       | 66666   | ...
Billy      | Kid       | 23455       | 12345   | ...
  • Wenn die Abfrage war "Jane", würde ich erwarten, dass Zeile #1 zurückgegeben werden, sowie Zeile #2.
  • Eine Abfrage für 12345 würde die Ausbeute Zeilen #1 und #3.

Recht jetzt mein code sieht ziemlich viel wie folgt:

IEnumerable<Customer> searchResult = context.Customer.Where(
    c => c.FirstName   == query ||
         c.LastName    == query ||
         c.PhoneNumber == query ||
         c.ZipCode     == query
         //and so forth. Fugly, huh?
);

Dies offensichtlich funktioniert. Es riecht wirklich schlechte Praxis zu mir, obwohl, da jede änderung in der Person (entfernen von Eigenschaften, Einführung neuer Eigenschaften), brechen Zeug.

Also: gibt es da eine LINQ-foo, der Suche über alle Eigenschaften, gleich welcher Person, die ich um sich werfen?

  • Konnte nicht Sie tun es mit der spiegelung?
  • Wie würde ich gehen? Gerade erst mit c# und .net-Zeug ...
  • ist das nicht eines der schönen Dinge zu haben? Wenn Sie entfernen einer Eigenschaft, erhalten Sie kompilieren Fehler.
  • Aber er könnte auch wollen, dass es flexibel an den Punkt, wo er könnte noch mehr Eigenschaften, und es würde immer noch funktionieren, genau das gleiche. Daher, warum ich erwähnte Reflexion.
  • Ich denke, das hängt davon ab, wie man es betrachtet. Ich würde lieber nicht haben, neu zu schreiben, alle meine Fragen jedes mal, wenn eine Eigenschaft Hinzugefügt wird, um eine Entität oder entfernt von einem. Auch Menschen neigen dazu, zu vergessen, das Zeug; eine Eigenschaft Hinzugefügt, um die Person, aber nicht auf die Abfrage nicht werfen Sie einen compiler-Fehler. Der compiler wird nicht die fehlerjäger für mich.
InformationsquelleAutor vzwick | 2012-10-11
Schreibe einen Kommentar