动态库(System.Linq.Dynamic)如何支持LIKE运算符?

时间:2011-01-05 01:06:04

标签: c# asp.net linq

任何机构都可以告诉我如何使用microsoft Dynamic Expression API管理LIKE运算符?

我需要在动态中添加多个Like Expression,其中查询

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

谢谢堆

6 个答案:

答案 0 :(得分:19)

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

类似的东西:

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

刚刚使用动态库附带的示例应用程序测试它,它会生成LIKE运算符

答案 1 :(得分: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"));

但上面的查询将创建它:

  

从CityName中选择*   喜欢“伦敦” CityName之类的   “美国”等...

你想要

  

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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

这将在整数字段中使用“Like”...

.Where(searchField +“。ToString()。包含(@ 0)”,searchString);

答案 4 :(得分:2)

@Jaime 这就是我需要的,谢谢。

  

var query =   db.Customers。   Where(“CityName.Contains(@ 0)或CityName.Contains(@ 1)”,“London”,“USA”)

答案 5 :(得分:0)

你可以试试这个。

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