How to use Dynamic LINQ (System.Linq.Dynamic) for LIKE operation?

前端 未结 5 1739
萌比男神i
萌比男神i 2021-02-04 07:31

Can any body tell me how can I use a LIKE operator using System.Linq.Dynamic?

I need to add more than one LIKE expression in my dynamic where query

相关标签:
5条回答
  • 2021-02-04 08:11

    This will allow the LIKE operator on integer fields:

    .Where(searchField + ".ToString().Contains(@0)", searchString);
    
    0 讨论(0)
  • 2021-02-04 08:12

    Just add more where clauses

    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"));
    

    but the above query will create it :

    select * from Customer where CityName like "london" and CityName like "USA" etc...

    you want

    select * from Customer where CityName like "london" or CityName like "USA" etc...

    To use Dynamic Created or statements you can use predicatebuilder there's really alot of functionality there that you can use...

    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"));
    
    0 讨论(0)
  • 2021-02-04 08:14

    Try using simply "CityName.Contains(@1)" this will convert to the proper lambda since its a method invocation on an accessible type.

    something like:

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

    Just tested it with the sample app that comes with the dynamic library and it generates the LIKE operator

    0 讨论(0)
  • 2021-02-04 08:17

    you can try this.

    IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
                var query = db.Customers.Where(c => keyword.Contains(c.CityName));
    
    0 讨论(0)
  • 2021-02-04 08:23

    You can use .StartsWith(), .EndsWith() and .Contains() which will generate LIKE SQL with trailing, leading and surrounding wildcards respectively. Don't know of a way to generate a statement with an embedded wildcard tho.

    0 讨论(0)
提交回复
热议问题