使用Linq搜索设施如CONTAINS或FREETEXT

时间:2010-12-09 16:03:45

标签: c# linq-to-entities

我希望这个标题非常直截了当。基本上,我有一个没有安装全文索引的数据库。而不是安装全文索引,我想知道是否有办法用Linq做到这一点?

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:1)

您可以在System.String上编写使用实例方法的LINQ查询。大多数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);
}