【问题标题】:Dynamic LINQ where query动态 LINQ where 查询
【发布时间】:2012-03-05 18:23:10
【问题描述】:

我正在使用动态 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?

标签: c# asp.net sql linq


【解决方案1】:

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

这可能会解决问题。

【讨论】:

  • 谢谢,解决了 - 我会支持你,但我需要 15 个代表:/
  • 酷,我也不确定,我想你每天都会学到新东西 :)
【解决方案2】:

由于您使用的是 Linq to Sql,因此您可以使用 SqlMethods 辅助类。

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

【讨论】:

    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多