J'espère que le titre de ceci est assez simple. Fondamentalement, j'ai une base de données qui n'a pas l'indexation de texte intégral installé. Plutôt que d'installer l'indexation de texte intégral, je me demandais s'il y avait une façon de le faire avec Linq?Rechercher facilité comme CONTAINS ou FREETEXT en utilisant Linq
Répondre
Vous pouvez écrire des requêtes LINQ qui utilisent des méthodes d'instance sur System.String
. La plupart des fournisseurs LINQ sont capables de convertir cela en instructions SQL. Par exemple:
from customer in db.Customers
where customer.Name.Contains("foo") || customer.Name.Contains("bar")
select customer;
LINQ to Entities se convertir en quelque chose comme ceci:
SELECT T1.*
FROM Customers T1
WHERE T1.Name LIKE '%' + @p1 + '%'
OR T1.Name LIKE '%' + @p2 + '%'
Notez que lorsque vous avez besoin d'un nombre dynamique de mots à rechercher, vous pouvez utiliser le PredicateBuilder. Il vous permet de créer des prédicats contenant des instructions OR. La réécriture avec des syndicats est également une méthode efficace. Par exemple:
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);
}
Je crois que vous êtes après quelque chose comme:
from xx in table
where uids.Contains(xx.uid.ToString())
select xx
?
Si vous êtes après une recherche séparée de chaîne, peut-être:
string input = "some String";
string[] toSearchFor = GetSearchStrings();
var containsAll = toSearchFor.All(x => input.Contains(x));
+1 - me battre pour elle re .Toutes() ... Cela dit, je pense que cette solution générale (essayer d'imiter la recherche FreeText) sera une véritable ressource et de porc de performance pour la OP. –
Je ne pense pas que LINQ to Entities est capable de gérer l'opérateur 'All'. – Steven
Cela ne fonctionne pas si vous avez 2 mots –
Cela peut fonctionner avec plusieurs mots, mais lorsque vous avez besoin d'un nombre dynamique de mots, vous devez écrire la requête LINQ différemment (avec des unions par exemple) ou utiliser PredicateBuilder: http: //www.albahari.com/nutshell/predicatebuilder.aspx. – Steven
Le problème avec cette réponse est que je ne sais pas combien de mots-clés arrivent. Donc, si j'ai 3 mots-clés, cela manquera un. –