【问题标题】:How to use Dynamic LINQ (System.Linq.Dynamic) for LIKE operation?如何使用动态 LINQ (System.Linq.Dynamic) 进行 LIKE 操作?
【发布时间】:2011-06-03 18:05:52
【问题描述】:

谁能告诉我如何使用System.Linq.Dynamic 使用 LIKE 运算符?

我需要在我的动态 where 查询中添加多个 LIKE 表达式

/*
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1", "London", "USA")
*/
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1%", "London", "USA")

谢谢大家

【问题讨论】:

    标签: c# asp.net linq dynamic-linq


    【解决方案1】:

    尝试简单地使用“CityName.Contains(@1)”,这将转换为正确的 lambda,因为它是对可访问类型的方法调用。

    类似:

    var query =
    db.Customers.
    Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA")
    

    刚刚用动态库自带的示例应用对其进行了测试,它生成了 LIKE 运算符

    【讨论】:

      【解决方案2】:

      您可以使用 .StartsWith(), .EndsWith().Contains() 分别生成带有尾随、前导和环绕通配符的 LIKE SQL。不知道如何使用嵌入式通配符生成语句。

      【讨论】:

        【解决方案3】:

        这将允许在整数字段上使用LIKE 运算符:

        .Where(searchField + ".ToString().Contains(@0)", searchString);
        

        【讨论】:

          【解决方案4】:

          只需添加更多 where 子句

          var query = db.Customers.Where(c=>c.CityName.contains("London"));
          query = query.Where(c=>c.CityName.contains("USA"));
          query = query.Where(c=>c.CityName.contains("Johannesburg"));
          

          但是上面的查询会创建它:

          select * from Customer where CityName 像“伦敦” CityName 像 “美国”等...

          你想要的

          select * from Customer where CityName 像“伦敦” CityName 像 “美国”等...

          要使用 Dynamic Created 或语句,您可以使用 predicatebuilder 真的很多 您可以使用的功能...

          http://www.albahari.com/nutshell/predicatebuilder.aspx

          var predicate = PredicateBuilder.False<Customer>();
          predicate = predicate.Or(c=>c.CityName.Contains("London"));
          predicate = predicate.Or(c=>c.CityName.Contains("USA"));
          predicate = predicate.Or(c=>c.CityName.Contains("Johannesburg"));
          

          【讨论】:

          • 我需要使用动态表达式,所以我应该将条件作为字符串传递
          • 感谢 Gavan 并为误会感到抱歉,我只需要在 where 子句中动态添加字段,就像字符串一样:Where("CityName Like @0 or CityName Like @1", "London", " USA") 在字符串中有字段,可以动态生成,但在您的示例中并非如此。但感谢您的陪伴
          【解决方案5】:

          你可以试试这个。

          IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
                      var query = db.Customers.Where(c => keyword.Contains(c.CityName));
          

          【讨论】:

          • 我喜欢你的把戏,但它不是正确的答案,因为我需要从字符串中动态选择我的字段名称所以谢谢队友。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-19
          • 2021-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-09
          相关资源
          最近更新 更多