2012-03-05 138 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等更灵活