2013-01-23 65 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與封閉在%字符的搜索詞。