动态LINQ在哪里查询

时间:2012-03-05 18:23:11

标签: c# asp.net sql linq

我正在使用动态LINQ从用户为给定搜索选择的给定列创建查询。

e.g。简化代码ex:

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时,有没有办法在搜索字符串中使用通配符?

此致

2 个答案:

答案 0 :(得分:3)

您可以尝试使用.StartsWith || .EndsWith || .Contains

这可能会解决问题。

答案 1 :(得分:1)

由于您正在使用Linq to Sql,因此您可以使用SqlMethods帮助程序类。

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

更灵活