带有 sql 服务器的 ServiceStack ormlite:如何使用通配符获取 where 子句
ServiceStack ormlite with sql server: how to get a where clause with wildcards
我们如何让 servicestack 的 ormlite 生成 SQL 执行这样的 WHERE 子句:
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'
String Contains 表达式在 OrmLite 中按预期方式工作,如本 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"));
哪个 returns 符合预期的有效匹配并将执行的查询记录到控制台:
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,它应该可以作为预期。
我们如何让 servicestack 的 ormlite 生成 SQL 执行这样的 WHERE 子句:
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'
String Contains 表达式在 OrmLite 中按预期方式工作,如本 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"));
哪个 returns 符合预期的有效匹配并将执行的查询记录到控制台:
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,它应该可以作为预期。