代码之家  ›  专栏  ›  技术社区  ›  Mahsa Hassankashi

servicestack或mlite中是否存在unpivot或cross-apply?

  •  1
  • Mahsa Hassankashi  · 技术社区  · 6 年前

    我正在使用ServiceStack 4.5.14。 我想把一个guid列表传递给下面这样的查询。

    表名:图像 列:(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" });
    

    它返回一个结果,其id和imageid为000….当它们为空时。

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

    有什么帮助吗?

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  2
  •   mythz    6 年前

    要查询参数化字段,应包含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") });
    

    如果值为空,则很可能是在伪装错误,您可以通过以下方式冒泡错误:

    OrmLiteConfig.ThrowOnError = true;
    

    或启用调试 logging 使用:

    LogManager.LogFactory = new ConsoleLogFactory();
    

    在v5+中,您还可以检查sql命令 之前 他们被处决的原因是:

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