我想使用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创建此查询的最有效方法是什么?
答案 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
,搜索字词包含在%
个字符中。