【问题标题】:ServiceStack OrmLite OrderBy on joined table columns连接表列上的 ServiceStack OrmLite OrderBy
【发布时间】:2019-08-06 05:46:13
【问题描述】:

我希望在 OrmLite 中创建一个 OrderBy 语句,在我的查询中使用来自多个连接表的数据:

myQuery.OrderBy<MainTable, SubTable>((m, s) => m.Col1 < s.Col2)

就像使用 OrmLite 的 WHERE 子句一样:

myQuery.Where<MainTable, SubTable>((m, s) => m.Col1 < s.Col2)

但使用 OrderBy 是不可能的。我可以通过其他方式解决此问题吗?

【问题讨论】:

    标签: ormlite-servicestack


    【解决方案1】:

    使用OrderBy和ThenBy按多列排序,例如:

    q.OrderBy<MainTable>(m => m.Col1)
     .ThenBy<SubTable>(s => s.Col2);
    

    如果你需要 OrderBy 一个表达式,你可以使用一个字符串:

    q.OrderBy("Col1 < Col2");
    

    对于typed properties in string expressions 使用:

    q.OrderBy($"{q.Column<MainTable>(m => m.Col1)} < {q.Column<SubTable>(s => s.Col2)}");
    

    在最新的 v5.5.1 中,现在是 available on MyGet,您还可以在 OrderBy 中使用来自多个表的类型化表达式,例如:

    q.OrderBy<MainTable, SubTable>((m, s) => m.Col1 < s.Col2 ? m.Col1 : s.Col2)
    

    【讨论】:

    • 这适用于某些表达式,但是否可以在如下表达式中包含 linq:q.OrderBy&lt;MainTable, SubTable&gt;((m, s) =&gt; (m.Col1 != null ? s.Col2 : s.Col3)) - 并利用 OrmLite 转换为正确的目标 SQL 而不是执行字符串表达式?
    • @PerErikGransøe 这已添加到 OrmLite,请查看我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多