linq-keyword-Suche mit enthält

Ok Jungs, das macht keinen Sinn...

Habe ich 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 die Allgemeine Idee ist, dass aus der Liste der Unternehmen, die ich wollen, dass alle, die enthalten alle keywords in den such-Begriff in meiner textbox auf der Benutzeroberfläche.

Mein problem ist dieses "Enthält" (hervorgehoben oben in **) ... wenn ich sage "Firma" in der Zeichenfolge, und ich Suche nach "Co" ich erwarte, dass er, dass als Ergebnis, weil der name enthalten wäre, aber es ist nicht ...

irgendwelche Ideen ?

EDIT:

Ok fand ich, dass das problem war die groß-und Kleinschreibung, damit ich Refactoring der code zu diesem:

//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();
}

Um Ihre Rückmeldung unter:

Den Suchbegriff etwas wie "Test Firma 1", ich bin auf der Suche für alle Ergebnisse, wo "test" und "Gesellschaft" und "1" kann gefunden werden in den Namen des Unternehmens und die Ergebnismenge enthält alle Suchbegriffe angezeigt, wenn der vollständige Suchbegriff ist geteilt durch " ".

der sauberste Weg, dies zu tun ist mit einer Schleife so wie ich es verstehe??? ... oder bin ich da falsch ?

also habe ich im Grunde Lesen Sie diese als ...

  1. bekommen eine Liste von allen Unternehmen
  2. filter-Liste nach Suchbegriff 1
  3. aus gefilterte Liste filtern nach Suchbegriff N ... und solange wiederholen, bis alle Bedingungen berücksichtigt werden.
  4. die Ergebnismenge enthält nun alle Suchbegriffe in den Namen des Unternehmens.

Den aktuellen code scheint zu funktionieren und die Art der Antworten auf meine Frage ... aber habt Ihr Jungs denke, es gibt eine effizientere Methode, dies zu tun?

Dank für die Hilfe an alle 🙂

EDIT 2:

Danke an alle für die Hilfe, unten glaube ich die Finale version (noch in der Testphase) sollte so sein:

//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();

danke an alle 🙂

  • Sie sollten setzen, ändern Sie die Abfrage innerhalb der Schleife: die Ergebnisse = Ergebnisse.wo(comp.Name.Enthält(searchTerms[i])), und entfernen Sie die "Tolist". Rufen Sie die .tolist nur einmal nach der Schleife. Vielleicht wird es nicht Ihr problem lösen, aber ich denke, es der richtige Weg, es zu tun.
  • Hallo jonathon ... der ToList-Aufruf sorgt für das gefilterte Ergebnis von jedem loop-operation hat immer den Typ List<Unternehmen> eher als ein ResultGroup oder was auch immer es ist, dass linq systemeigen (es scheint zu funktionieren ähnlich wie eine arraylist oder ein dictionary-Objekt). Dieser Aufruf stellt sicher, dass die gleiche Art abgefragt wird und schließlich in meinem databinding-Prozess nach diesem code.
InformationsquelleAutor War | 2011-03-11
Schreibe einen Kommentar