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

北城以北 提交于 2019-12-04 08:26:40

问题


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

/*
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")

thanks heaps


回答1:


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




回答2:


This will allow the LIKE operator on integer fields:

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



回答3:


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.




回答4:


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



回答5:


@Jaime that is what i need, thanks.

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




回答6:


you can try this.

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


来源:https://stackoverflow.com/questions/4599989/how-to-use-dynamic-linq-system-linq-dynamic-for-like-operation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!