Ich hoffe, dass der Titel davon ziemlich geradlinig genug ist. Grundsätzlich habe ich eine Datenbank, in der die Volltextindizierung nicht installiert ist. Anstatt die Volltextindizierung zu installieren, habe ich mich gefragt, ob es eine Möglichkeit gibt, dies mit Linq zu tun?Sucheinrichtung wie CONTAINS oder FREETEXT mit Linq
Antwort
Sie können LINQ-Abfragen schreiben, die Instanzmethoden auf System.String
verwenden. Die meisten LINQ-Provider können dies in SQL-Anweisungen konvertieren. Zum Beispiel:
from customer in db.Customers
where customer.Name.Contains("foo") || customer.Name.Contains("bar")
select customer;
LINQ to Entities wird dies so zu etwas umwandeln:
SELECT T1.*
FROM Customers T1
WHERE T1.Name LIKE '%' + @p1 + '%'
OR T1.Name LIKE '%' + @p2 + '%'
Beachten Sie, dass, wenn Sie eine dynamische Anzahl von Wörtern müssen suchen, können Sie die PredicateBuilder verwenden. Damit können Sie Vergleichselemente erstellen, die ODER-Anweisungen enthalten. Das Umschreiben mit Gewerkschaften ist ebenfalls eine effektive Methode. Zum Beispiel:
string[] searchWords;
// Define an empty set.
var customers =
from customer in db.Customers
where false
select customer;
// Union the empty set with a set for a word.
foreach (var temp in searchWords)
{
var searchWord = temp;
customers = customers.Union(
from customer in db.Customer
where customer.Name.Contains(searchWord)
select customer);
}
ich Sie glauben, sind nach so etwas wie:
from xx in table
where uids.Contains(xx.uid.ToString())
select xx
?
Wenn Sie nach eigenem String-Suche sind, vielleicht:
string input = "some String";
string[] toSearchFor = GetSearchStrings();
var containsAll = toSearchFor.All(x => input.Contains(x));
+1 - schlagen Sie mich, um es .Alle re() ... Das heißt, ich glaube, dass diese allgemeine Lösung (versucht Freitextsuche zu emulieren) wird eine echte Ressource und Leistung hog für die sein OP. –
Ich glaube nicht, dass LINQ to Entities in der Lage ist, den "All" -Operator zu handhaben. – Steven
- 1. Wie machen Sie ein IN oder CONTAINS in LINQ mit LAMBDA-Ausdrücken?
- 2. NHibernate Linq .Contains Code-Generierung hat Fehler?
- 3. SQL Server "Optional" FreeText Search
- 4. LINQ to SQL und Null-Strings, wie verwende ich Contains?
- 5. FREETEXT Problem auf gespeicherte Prozedur
- 6. Django Formular mit Auswahl aber auch mit Freetext Option?
- 7. Suche nach Byte [] in Linq kann keine Contains Funktion verwenden
- 8. LINQ-Ring: Beliebige() und Contains() für riesige Sammlungen
- 9. NSPredicate: Kombiniere CONTAINS mit IN
- 10. Verwenden .Contains() in EF 6
- 11. Linq mit einem oder Joinbedingung
- 12. Elasticsearch `contains` Vorschlag
- 13. MS SQL CONTAINS mit Ampersand Search
- 14. Wie funktioniert contains() in PL-SQL?
- 15. jQuery: contains (unicode_characters)
- 16. Verwirrt, ob FREETEXTTABLE oder CONTAINSTABLE
- 17. Ormlite Where-Contains Fails
- 18. Wie konvertiert man diese SQL in LINQ oder Lambda-Ausdruck?
- 19. LINQ to Entity: mit Contains in der "Auswahl" Teil löst unerwarteten Fehler
- 20. SQL Contains Statement
- 21. Unterstrich enthält (_.contains) auf Objekttypen
- 22. Wie filter Kind Sammlung mit Linq dynamische
- 23. VB.NET List (X) .Contains Verhalten
- 24. NHibernate LINQ oder HQL
- 25. LINQ zentralisieren oder konsolidieren
- 26. Dynamische LINQ oder Bedingungen
- 27. Linq Karte! oder sammeln!
- 28. Wie bekomme ich alle Elemente mit NSPredicate CONTAINS IN Array
- 29. Wie erstelle ich Erweiterungen für alle Typen mit ".contains"?
- 30. LINQ Expression <Func <T, bool>> equavalent von .Contains()
Dies funktioniert nicht, wenn Sie 2 Wörter haben –
Dies kann mit mehreren Wörtern arbeiten, aber wenn Sie eine dynamische Anzahl von Wörtern benötigen, müssen Sie die LINQ-Abfrage anders schreiben (mit Unionen zum Beispiel) oder verwenden Sie den PredicateBuilder: http: //www.albahari.com/nutshell/predicatebuilder.aspx. – Steven
Das Problem mit dieser Antwort ist, dass ich nicht weiß, wie viele Schlüsselwörter durchkommen. Also, wenn ich 3 Schlüsselwörter habe, dann wird das eine verpassen. –