如何编写在System.Linq.Dynamic中生成LIKE T-SQL语句的语句

时间:2018-04-04 12:40:48

标签: c# linq system.linq.dynamic

我正在使用System.Linq.Dynamic并且在大多数情况下它效果很好。但是我试图得到一个StartsWith,它会在T-SQL中产生类似Description LIKE 'test%'的东西。

我似乎没有找到,并且文档很少,因为我注意到,在我的代码中写入哪个语句以传递给Dynamic库的Where方法来生成LIKE语句。

我已经尝试但没有为我效劳的事情:

.Where("Description LIKE \"test%\"");
.Where("Description < \"test%\"");

但是没有任何东西生成我所追求的LIKE语句。

2 个答案:

答案 0 :(得分:1)

System.Linq.Dynamic将您的文本转换为常规LINQ表达式,并且没有“LIKE”的概念。你会如何在常规LINQ中写下你的喜欢?这样的事情:

ctx.Entity.Where(c => c.Description.StartsWith("test"));

这几乎完全映射到你应该用动态linq做的事情:

// @0 is first parameter, which is "test" in this case
ctx.Entity.Where("Description.StartsWith(@0)", "test"); 

您也可以传递值内联,但我建议您始终使用上面的参数

ctx.Entity.Where("Description.StartsWith(\"test\")"); 

您可以将StartsWith替换为ContainsEndsWith,以生成各自的tsql“LIKE”等效项。

答案 1 :(得分:0)

我没有使用过这个库,但是他们有example生成LIKE语句。这适合你的使用吗?

对于后人,这是代码:

var q = from c in db.Customers
        where SqlMethods.Like(c.CustomerID, "C%")
        select c;