2012-03-05 144 views
3

我使用動態LINQ從給定的列創建用戶爲給定搜索選擇的查詢。動態LINQ查詢

例如簡化代碼,例如:

var counter = 0; 
var predicate = string.Empty; 
foreach(var field in selectedFields) 
{ 
    predicate += field + ".Contains(@" + counter + ") ||"; 
    // logical OR, without it the SQL generates AND 
}  
predicate = predicate.Remove(predicate.LastIndexOf("||", 2)); 
query = query.Where(predicate, searchvalues); 

此代碼生成給定的SQL查詢

(([t0].[Field1] LIKE 'searchstring') OR ([t0].[Field2] LIKE 'searchstring')) 

哪個是正確的,儘管我想要做的是能夠使用通配符,當我試圖進入比方說,一個百分比字符,生成的SQL是

(([t0].[field1] LIKE 'searchstring' ESCAPE '~') OR ([t0].[field2] LIKE 'searchstring' ESCAPE '~')) 

有沒有在使用動態L2S時在搜索字符串中使用通配符的方法?

問候

+0

您是否正在使用Linq to Sql或實體框架? – Phil 2012-03-05 18:32:51

+0

使用LINQ到SQL – 2012-03-05 18:51:03

回答

3

您可以嘗試使用.StartsWith || .EndsWith || .Contains

這可能會解決這個問題。

+0

謝謝,解決了它 - 我會upvote你,但我需要15代表:/ – 2012-03-05 18:45:20

+0

很酷,我也不確定,你每天都會學到新的東西,我想:) – 2012-03-05 18:49:25

1

由於您正在使用Linq to Sql,因此您可以使用SqlMethods幫助程序類。

其中一種方法是Like,它映射到SQL LIKE子句。如果您需要它,它比使用.StartsWith等更靈活