2010-12-09 2 views
0

Я надеюсь, что название этого довольно прямолинейно. В принципе, у меня есть база данных, в которой не установлено полнотекстовое индексирование. Вместо того, чтобы устанавливать полнотекстовую индексацию, мне было интересно, есть ли способ сделать это с Linq?Поиск объекта, такого как CONTAINS или FREETEXT с использованием Linq

ответ

1

Вы можете писать запросы LINQ, использующие методы экземпляра на System.String. Большинство провайдеров LINQ могут преобразовывать это в SQL-запросы. Например:

from customer in db.Customers 
where customer.Name.Contains("foo") || customer.Name.Contains("bar") 
select customer; 

LINQ к Entities преобразует это что-то вроде этого:

SELECT T1.* 
FROM Customers T1 
WHERE T1.Name LIKE '%' + @p1 + '%' 
OR T1.Name LIKE '%' + @p2 + '%' 

Обратите внимание, что, когда требуется динамическое количество слов для поиска, вы можете использовать PredicateBuilder. Он позволяет создавать предикаты, содержащие инструкции OR. Переписывание его с помощью союзов также является эффективным методом. Например:

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); 
} 
1

Я считаю, что вы после этого что-то вроде:

from xx in table 
where uids.Contains(xx.uid.ToString()) 
select xx 

?

Если вы после строки поиска индивидуальной, возможно:

string input = "some String"; 
string[] toSearchFor = GetSearchStrings(); 
var containsAll = toSearchFor.All(x => input.Contains(x)); 
+0

+1 - бить меня к нему вновь .Все() ... что сказал, я чувствую, что это общее решение (пытаясь подражать FREETEXT поиска) будет реальный ресурс и производительность боров для ОП. – 2010-12-09 16:08:33

+0

Я не думаю, что LINQ to Entities может обрабатывать оператор `All`. – Steven 2010-12-09 16:26:38

Смежные вопросы