Поиск объекта, как CONTAINS или FREETEXT, используя Linq - PullRequest
0 голосов
/ 09 декабря 2010

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

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

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

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

LINQ to 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 голос
/ 09 декабря 2010

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

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...