动态LINQ where查询

3
我是使用动态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时,是否有一种方法可以在搜索字符串中使用通配符?

谢谢!


你是在使用 Linq to Sql 还是 Entity Framework? - Phil
2个回答

3
你可以尝试使用.StartsWith || .EndsWith || .Contains,这可能会解决问题。

谢谢,问题解决了 - 我想赞美你,但我需要15点声望 :/ - Ólafur Aron
很酷,我也不确定,我猜每天都能学到新东西 :) - AD.Net

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接