sql-server - ServiceStack ormlite 与 sql server : how to get a where clause with wildcards

标签 sql-server servicestack ormlite-servicestack

我们如何让 servicestack 的 ormlite 生成执行如下 WHERE 子句的 SQL:

WHERE FirstName like '%joe%' OR lastname like '%joe%'

目前如果我这样做:

db.Select<Person>.Where(x=> x.LastName.Contains(searchstring) || x.FirstName.Contains(searchstring));

它将生成如下所示的 WHERE 子句,且不带所需的通配符:

WHERE FirstName like 'joe' OR lastname like 'joe'

最佳答案

OrmLite 中的 String Contains 表达式按预期工作,如本 Live example on Gistlyn 中所示。它使用最新版本的 OrmLite:

LogManager.LogFactory = new ConsoleLogFactory();

public class Person
{
    [AutoIncrement]
    public long Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

db.CreateTable<Person>();

db.Insert(new Person { FirstName = "Joeseph", LastName = "Smith" });

var rows = db.Select<Person>(x => 
    x.FirstName.Contains("joe") || x.LastName.Contains("joe"));

它按预期返回有效匹配并将执行的查询记录到控制台:

DEBUG: SQL: CREATE TABLE "Person" 
(
  "Id" INTEGER PRIMARY KEY AUTOINCREMENT, 
  "FirstName" VARCHAR(8000) NULL, 
  "LastName" VARCHAR(8000) NULL 
); 

DEBUG: SQL: INSERT INTO "Person" ("FirstName","LastName") VALUES (@FirstName,@LastName)
PARAMS: @FirstName=Joeseph, @LastName=Smith
DEBUG: SQL: SELECT "Id", "FirstName", "LastName" 
FROM "Person"
WHERE (upper("FirstName") like @0 OR upper("LastName") like @1)
PARAMS: @0=%JOE%, @1=%JOE%

OrmLite 使用参数化查询已有一段时间,因此您必须使用旧版本的 OrmLite,如果您升级到最新的 v4.5.0 OrmLite,它应该按预期工作。

关于sql-server - ServiceStack ormlite 与 sql server : how to get a where clause with wildcards,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153281/

相关文章:

sql - 将权重存储在数据库表中

c# - 如何通过存储过程获取数据表

razor - 是否可以使用 servicestack 在 Razor View 中设置断点?

repository - 如何将 ormlite 注入(inject)或连接到 ServiceStack 存储库?

ormlite-servicestack - 为什么 Linq (Expression<Func<T,bool>>) 在泛型类中生成不正确的 Where 子句?

mysql - 尝试使用 SQL Server 导入导出向导将 MySQL 数据库迁移到 SQL Server 时发生崩溃

c# - 使用远程 sql server 进行批量插入时出现异常

sql - 使用 ServiceStack.OrmLite 执行原始 SQL

asp.net - 来自根抛出异常的 ServiceStack REST API 路径变量

c# - 带有临时字段的 ServiceStack Ormlite 类