Ok Leute, das macht keinen Sinn...
Ich habe diese Methode:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results = Company.List();
// foreach keyword
for (int i = 0; i < searchTerms.Length; i++)
{
// results = the existing result set - the items that dont meet the current search term results.
results = (from comp in results
where comp.Name.Contains(searchTerms[i]
select comp).ToList();
}
Nun ist die allgemeine Idee, dass ich aus der Liste der Unternehmen alle, die alle Schlüsselwörter in den Suchbegriff in meinem Textfeld auf der ui zur Verfügung gestellt enthalten wollen.
Mein Problem ist diese "Enthält" (oben in ** hervorgehoben) ... wenn ich sagen, "Unternehmen" in der Zeichenfolge Name und ich suche nach "Co" ich erwarte, dass es als Ergebnis, weil der Name enthalten würde, aber es nicht ...
Irgendwelche Ideen?
EDIT:
Ok fand ich, dass das Problem Groß-/Kleinschreibung war, so dass ich den Code zu diesem refactored:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results = Company.List();
// foreach keyword
for (int i = 0; i < searchTerms.Length; i++)
{
// results = the existing result set - the items that dont meet the current search term results.
results = (
from comp in results
where comp.Name.ToLower().IndexOf(searchTerms[i].ToLower()) > -1
select comp
).ToList();
}
Auf einige Ihrer Rückmeldungen möchte ich im Folgenden eingehen:
Der Suchbegriff könnte z. B. "Test Company 1" lauten, ich suche alle Ergebnisse, in denen "Test" und "Company" und "1" im Firmennamen vorkommen, und die Ergebnismenge muss alle Suchbegriffe enthalten, die angezeigt werden, wenn der vollständige Suchbegriff durch " " getrennt wird.
der sauberste Weg, dies zu tun, ist mit einer Schleife, wie ich es verstehe??? ... oder liege ich falsch?
Ich lese das also im Grunde als ...
- eine Liste aller Unternehmen erhalten
- Liste nach Suchbegriff filtern 1
- aus gefilterter Liste nach Suchbegriff N filtern ... und wiederholen, bis alle Begriffe berücksichtigt sind.
- enthält die Ergebnismenge nun alle im Firmennamen angegebenen Suchbegriffe.
Der aktuelle Code scheint zu funktionieren und beantwortet irgendwie meine Frage ... aber denken Sie Jungs theres eine effizientere Möglichkeit, dies zu tun?
Vielen Dank für die Hilfe :)
EDIT 2:
Dank all der Hilfe, die hier gegeben wurde, glaube ich, dass die endgültige Version (noch in der Testphase) so aussehen sollte:
// break down the search terms in to individual keywords
string[] searchTerms = ui_txtSearch.Text.ToLower().Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// get the complete list of companies
List<Company> results;
// results = the existing result set - the items that dont meet the current search term results.
results = (
from comp in Company.List()
where searchTerms.All(s => comp.Name.ToLower().IndexOf(s) > -1)
select comp
).ToList();
Vielen Dank an alle :)