2013-01-23 64 views
0

我想使用Entity Framework 5来搜索我的一个表。我不知道查询中有多少个单词,但我想匹配所有这些单词。使用实体框架搜索数据​​库。 LIKE运算符

查询= 你好

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

查询= 的hello world

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

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

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

将匹配“[email protected]”,但如果搜索词是有序的其他方式,也不会找到这个人:

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

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

回答

1

使用LINQ到实体,您可以使用。载有做equivilant在SQL

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

对不起忘了应工作的where子句。

+0

这将生成“select * from where where列LIKE'hello'”。 (CAST(CHARINDEX(N'%'+ @ p__linq__1 + N'%',[Extent1]。[column])AS int))> 0) –

+0

@ stian.net为什么?你会添加'%'吗? –

+0

@Bob,因为我想搜索.. LIKE'test'不会返回包含'test'的列 –

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与封闭在%字符的搜索词。