0

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

查询=你好

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

查询=你好世界

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 创建此查询的最有效方法是什么?

4

2 回答 2

1

使用 linq to entity 你可以使用 .Contains 在 SQL 中做等价

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

抱歉忘记了应该起作用的 where 子句。

于 2013-01-23T13:56:17.680 回答
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包含在%字符中的搜索词。

于 2013-01-23T15:46:08.583 回答