我是 LINQ 和 OrmLite/MySql 的新手。我有一个需要产生 where 子句的服务请求参数:
`Name` LIKE '%something%' OR `Name` LIKE '%something%else%'
我知道我可以创建一个
IN()
或 =
条款,通过:ev.Where(rn => Sql.In(rn.Name, request.Name)); // Assuming an array here
ev.Where(rn => rn.Name== request.Name));
但我似乎无法找到一个能让我建立一个
LIKE
的结构。 .另外,Name
实际上是一个别名,所以我试图避免手动构建 where 子句。
最佳答案
您可以使用 Contains
构建该特定示例, IE:
ev.Where(rn => rn.Contains(rn.Name, "something")
|| rn.Contains(rn.Name, "something%else"));
StartsWith
和 EndsWith
一般用于LINQ生成LIKE
仅在一端带有通配符的子句(但确实出现了 MySql 方言定义 StartsWith
有点 differently ,可能是为了提高效率。)您可以检查默认方言source code确认为
EndsWith
生成了什么和 Contains
.
关于servicestack - OrmLite/MySql/SqlExpressionVisitor - 需要 "like"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12921779/