使用Entity Framework搜索数据库。 LIKE运算符

时间:2013-01-23 13:48:35

标签: entity-framework tsql search

我想使用Entity Framework 5搜索我的一个表。我不知道查询中有多少单词,但我想匹配所有单词。

query = hello

SELECT * FROM [table] WHERE [column] LIKE '%hello%'

query = hello world

SELECT * FROM [table] WHERE [column] LIKE '%hello%' AND [column] LIKE '%world%'

我知道函数PATINDEX,但它不够好。为什么?我会告诉你:

SELECT * FROM person WHERE PATINDEX('%test%.com%', email)>0

将匹配“test@email.com”,但如果搜索字是以其他方式订购的,则不会找到此人:

SELECT * FROM person WHERE PATINDEX('%.com%test%', email)>0

使用EF创建此查询的最有效方法是什么?

2 个答案:

答案 0 :(得分:1)

将linq用于可以使用的实体。包含在SQL中执行等效的

 table(x => x.column).Where(y => y.ColumnName).Contains("hello");

抱歉忘了应该有效的where子句。

答案 1 :(得分:0)

您可以在foreach循环中构建查询:

var words = new[] {"com", "test"};
var table = <your initial DbSet or ObjectSet>

foreach (var word in words)
{
    string word1 = word; // prevent modified closure.
    table = table.Where(x => x.column.Contains(word1));
}

var result = table.ToList(); // Enumerate the composed linq query.

Contains功能转换为LIKE,搜索字词包含在%个字符中。