【问题标题】:ServiceStack OrmLite SelectMulti same tableServiceStack OrmLite SelectMulti 同表
【发布时间】:2022-01-18 18:38:45
【问题描述】:

这个问题有点相关:Joining same table multiple times in ServiceStack.OrmLite

TableAliasSelect 一起使用,但不适用于SelectMulti

例子:

var query = db.From<Department>(db.TableAlias("main"))
  .Where(main => main.DepLevel == 3)
  .Join<Department>((main, sub) => sub.DepParentNo == main.DepNo, db.TableAlias("sub"));

现在var rows = db.Select(query); 可以工作了,但这会崩溃:

var queryResults = db.SelectMulti<Department, Department>(query);

我已经确认,当使用db.Select 时,LastCommandText 正确地为所有三个表设置了别名。但是,SelectMulti 可能不会这样做。

错误信息如预期:列前缀“部门”与查询中使用的表名或别名不匹配。

【问题讨论】:

    标签: servicestack ormlite-servicestack


    【解决方案1】:

    在这里回答我自己的问题:

    SS的源码中有一个例子:

    AssertTupleResults(db.SelectMulti<Sale, ContactIssue, ContactIssue>(q, 
        new[] { "Sale.*", "buyer.*", "seller.*" }));
    

    https://github.com/ServiceStack/ServiceStack.OrmLite/blob/1ba40ef4b77d9ae792a268f1683c51960d4476d6/tests/ServiceStack.OrmLite.Tests/Issues/MultipleSelfJoinsWithJoinAliases.cs#L216

    所以现在的表达式是:

    var queryResults = db.SelectMulti<Department, Department>(query, 
        new[] { "main.*", "sub.*" });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多