C# 如何使用动态LINQ(System.LINQ.Dynamic)进行类似的操作?

C# 如何使用动态LINQ(System.LINQ.Dynamic)进行类似的操作?,c#,asp.net,linq,dynamic-linq,C#,Asp.net,Linq,Dynamic Linq,有谁能告诉我,我怎样才能使用一个像我这样的操作员 我需要在动态where查询中添加多个LIKE表达式 感谢堆只需添加更多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("Johannesbur

有谁能告诉我,我怎样才能使用一个像我这样的操作员

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


感谢堆

只需添加更多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"));
但上面的查询将创建它:

从Customer where CityName中选择* 比如“伦敦”和“城市名” “美国”等

你想要

从Customer where CityName中选择* 例如“伦敦”或“城市名称” “美国”等

要使用动态创建的or语句,您可以使用predicatebuilder 您可以使用的功能的列表

var predicate=PredicateBuilder.False();
谓词=谓词。或(c=>c.CityName.Contains(“伦敦”);
谓词=谓词。或(c=>c.CityName.Contains(“美国”);
谓词=谓词。或(c=>c.CityName.Contains(“约翰内斯堡”);

您可以使用
.StartsWith(),
.EndsWith()
.Contains()
,它们将分别生成带有尾随、前导和周围通配符的类似SQL。不知道用嵌入通配符tho生成语句的方法。

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

比如:

var query =
db.Customers.
Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA")
刚刚用动态库附带的示例应用程序对其进行了测试,它生成了类似的操作符

,您可以试试这个

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));
IList关键字=新列表(){“伦敦”、“美国”、“约翰内斯堡”};
var query=db.Customers.Where(c=>keyword.Contains(c.CityName));

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

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

我需要使用动态表达式,所以我应该将标准作为string传递感谢Gavan,很抱歉误解了,我只需要将字段动态添加到where子句中,就像string look:where(“类似CityName的@0或类似CityName的@1”、“伦敦”、“美国”)在字符串中有字段,可以动态生成,但在您的示例中不是这样。但谢谢你的公司我喜欢你的技巧,但这不是正确的答案,因为我需要从字符串中动态选择我的字段名,所以谢谢你,伙计。
IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));
.Where(searchField + ".ToString().Contains(@0)", searchString);