ServiceStack ormlite 中是否有反透视或交叉应用?

Is there unpivot or cross apply in ServiceStack ormlite?

我正在使用 ServiceStack 4.5.14。我想将 Guid 列表传递给如下查询。

Table 名称:图片
列:(Id -> Type=Guid)(ImageId -> Type=Guid)(Guid -> Type=Guid)

var result = Db.ExecuteSql("select value from image unpivot (value for col in (Id, ImageId)) un where Guid=(@param) order by Guid", 
            new { param = "5de7f247-f590-479a-9c29-2e68a57e711c" });
        

它 returns 结果是它们的 Id 和 ImageId 是 000.... 而它们是空的。

另一个问题是:如何将 Guid 列表作为参数发送到上述查询?

要查询参数化字段,您应该包含 Guid 而不是字符串,例如:

var result = Db.ExecuteSql(
    @"select value from image unpivot (value for col in (Id, ImageId)) un 
       where Guid=(@param) order by Guid", 
    new { param = new Guid("5de7f247-f590-479a-9c29-2e68a57e711c") });

如果值为 null,则可能伪装错误,您可以使用以下方法冒泡错误:

OrmLiteConfig.ThrowOnError = true;

或启用调试 logging

LogManager.LogFactory = new ConsoleLogFactory();

在 v5+ 中,您还可以检查 SQL 命令 它们执行之前:

OrmLiteConfig.BeforeExecFilter = dbCmd => Console.WriteLine(dbCmd.GetDebugString());