Wie implementieren von search-Funktionalität in C#/ASP.NET MVC
Ich bin die Entwicklung einer ASP.NET MVC 3-Anwendung mit C# und Razor.
Ich habe ein such-Formular, das wie folgt aussieht:
Dem Suchformular funktioniert in der folgenden Weise:
- Der Benutzer wählt aus, welche Immobilie Sie suchen möchten.
- Der Benutzer wählt, wie Sie wollen, um den Suchkriterien entsprechen (z.B. enthält, beginnt mit, endet mit, ist gleich, etc).
- Der Benutzer gibt einen Suchbegriff ein und klickt auf Suchen.
Die Auswahl im ersten drop-down in direktem Zusammenhang mit einer Eigenschaft, die in meinem ADO.NET Entity Framework model-Klasse (und damit direkt zu einer Tabelle Spalte).
Benutzer die Möglichkeit, explizit auswählen, welche Eigenschaft und welche matching-Methode bei der Suche, z.B. dass sich ein Benutzer wird explizit die Suche für alle Spiele der Prozess-Nummer, die gleich '132'.
Mein Erster Ansatz war der Einsatz von dynamischen linq to konstruieren Sie eine Where-Klausel aus der Suche nach Kriterien (siehe meine ursprüngliche Frage). Aber ich fange an zu denken, dass dies nicht der beste Weg, es zu tun.
Ich hoffe auch für Sie eine Lösung, die nicht von mir verlangen, zu codieren das Ergebnis für jede Eigenschaft + matching-Kriterien-Kombination.
Irgendwelche Vorschläge, wie ich das umsetzen sollte dieser Suche? Es muss nicht mit meiner aktuellen Suche zu bilden, die völlig offen für alle anderen Ideen, die den Anforderungen entsprechen.
Ich bin mir nicht sicher, ob diese Art der Suche ist die Spezifität, die erforderlich ist, von unseren Nutzern. Sie müssen in der Lage sein, um explizit anzugeben, ob Sie möchten, enthält, ist gleich, etc., und ich möchte vermeiden, Sie zu zwingen, zu lernen, einige string-syntax, dies zu erreichen. Fühlen Sie sich frei, um Ihre Anregung als eine Antwort.
Wenn Sie Modell die Immobilie, der Betreiber und der Begriff als 3 verschiedene Personen, ich verstehe nicht, warum die "dynamic linq" - option zwingen würde Sie zu fest etwas? Sie bauen würde, das erwartete Linq - Abfrage als string - aus gesammelten Informationen aus dem 3-Entitäten. Zum Beispiel, können Sie erstellen eine LinkOperation Eigentum der Betreiber-Einrichtung, die Ihnen dabei helfen, diese Zeichenfolge.
Hat dein switch-case-Anweisung auf den Typ oder den Namen des Attributs? Meiner Ansicht nach sein, die den Typ des Attributs, das ist wichtig und sollte Wirkung sowohl auf die Validierung des Klausel-Bereichen und den ausbau der Klausel. Jedoch konnte nicht Sie Gruppe thr-Typen in über 4 Fälle, Numerisch, Text, Zeit und alles andere?
InformationsquelleAutor dnatoli | 2011-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie bauen expression tree, wo, Prädikat mithilfe von code. Zum Beispiel,
Verwenden Sie es als
Orders.DynamicWhere(searchBy, searchValue)
. Sie können hinzufügen, einen weiteren parameter zu akzeptieren, die die Betreiber wie Gleich, Größer Als etc. zum abschließen der Funktion.Finden Sie unter diesen links für weitere info:
http://msdn.microsoft.com/en-us/library/bb882637.aspx
http://msdn.microsoft.com/en-us/library/bb397951.aspx
Überprüfen Sie auch Liste der Methoden auf die Expression-Klasse um eine Idee zu bekommen.
T
. (Die andere Tabelle ein FK zu meinemT
Tisch, aber ich bin nur daran interessiert, in einer Reihe, wenn es versehentlich mehr.) Nach verbringen eine Menge Zeit auf dieser, ich kann nicht sehen, wie ich das ändern kann, diese zu unterstützen, eine Eigenschaft in einer verwandten Tabelle.InformationsquelleAutor VinayC
Haben Sie sah in mit Lucene.NET für dieses Projekt? angesichts der Art Ihrer sucht, es wäre sehr einfach zu bauen, dass die Verwendung von Lucene, da es Ihnen erlaubt, verschiedene Filter kombinieren auf verschiedene Spalten wie Ihre Anforderungen
Lucene ist gut für full-text indexing. Aber der SQL Server hat auch eine full-text indexing service. Ich sollte auch darauf hinweisen, dass eine Volltext-Suche ist nur eine Art der Suche.
Genau. Und ich bin mir nicht sicher, wie die Volltext-Indizierung würde mir helfen, in diesem Fall, wenn ich nicht gerade dabei eine Decke "find ich alles in meiner Datenbank, enthält dieser Wert die" Art der Suche.
Könnte mir jemand erklären, warum das immer so viele upvotes, obwohl ich kann nicht sehen, wie es funktionieren würde mit meinem Stil der Suche und scheint, wie viel zu viel für einen Bildschirm suchen? Offensichtlich bin ich etwas fehlt...
Diese Antwort ist immer, so viele Stimmen, weil Lucene unterstützt die "google-artige" Suche Stil. So viele apps unterstützen jetzt die single search box, die es, was die Nutzer Anfang an wohl zu fühlen mit (im Allgemeinen). Sie haben erwähnt, dass Lucene sieht aus wie overkill, aber Lucene ist bereits tun, die schweres heben, Sie würde lediglich der index der Daten, die Sie wollte.
InformationsquelleAutor BlackTigerX
Können Sie mit der Dynamischen Linq und Sie können erstellen, Wo clausole mit eine utility-Klasse wie folgt aus:
So können Sie bauen eine Kriterien mit vielen Eigenschaften, die mit Oder-oder Und-Methoden und stellen Sie es in der Where-Betreiber von Dynamischen Linq.
InformationsquelleAutor Max Zerbini
Gestartet sind wir der Lösung von ähnlichen Abfragen gegen unsere Entity Framework-Modell mit dynamic linq-Abfragen. Allerdings sind unsere versuche zur Verallgemeinerung der Abfrage-Generierung führte zu schlechter performance durch EF verwirrt durch die daraus resultierende komplexe Ausdrücke, so dass am Ende schrecklich SQL produziert wurde.
Griffen wir zu Entity SQL.
InformationsquelleAutor Niklas Söderberg
Nicht sicher, wenn Sie mit MS SQL. Scheint SQL könnte, tun die meisten der Arbeit für Sie, und Sie bauen können dynamische Abfragen. Offensichtlich ist die select/from-Anweisung muss arbeiten, aber Sie bekommen die Idee von der where-Klausel.
InformationsquelleAutor Michael C. Gates
Hätte Sie den ersten combo-Datenquelle eingestellt myEntityObject.GetType().GetProperties(), die zweite, um eine Liste der anzeigbaren
Funcs<string, string, bool>
wie diese:Später, beim laden der form:
Später, wenn Sie wollen wählen Sie Ihre Entitäten:
InformationsquelleAutor Evren Kuzucuoglu
create-Methode, und rufen Sie auf Schaltfläche klicken Sie auf demo unten
öffentlichen Liste gettaskssdata(int c, int userid, string a, string StartDate, string EndDate, string ProjectID, string statusid)
{
InformationsquelleAutor Muhafil Saiyed