15

任何人都可以告诉我如何使用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")

非常感谢

4

5 回答 5

31

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

就像是:

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

刚刚使用动态库附带的示例应用程序对其进行了测试,并生成了 LIKE 运算符

于 2011-01-05T02:08:34.107 回答
5

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

于 2011-01-05T01:14:44.413 回答
4

这将允许LIKE整数字段上的运算符:

.Where(searchField + ".ToString().Contains(@0)", searchString);
于 2012-10-23T21:54:55.980 回答
3

只需添加更多 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 like "london" and CityName like "USA" etc...

你要

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

要使用 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"));
于 2011-01-05T01:14:11.683 回答
0

你可以试试这个。

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));
于 2011-01-05T08:35:28.363 回答