【问题标题】:Sorting on nullable child property in CoolStorage在 CoolStorage 中对可为空的子属性进行排序
【发布时间】:2010-11-29 03:18:22
【问题描述】:

假设我们有 Films 和 HeaderItems。有时一部电影有一个 HeaderItem 链接到它 OneToOne 但并非总是如此。

现在我想按标题对所有电影进行排序,但我希望将 HeaderItem 链接到它们的电影按 HeaderItem.Position 排序(如果 HeaderItem 不为空)。

我尝试在 Films 和 OneToOne 上实现 OneToMany,但我可以让排序工作。他无法将 QueryExpression 转换为 String,反之亦然。

关于如何做到这一点的任何想法?

【问题讨论】:

  • 所以必须先按HeaderItem.Position(如果存在的话)排序,再按Title?这意味着所有带有 HeaderItem 的记录都会排在第一位。
  • 是的,这就是一般的想法。

标签: coolstorage


【解决方案1】:

我还没有尝试过,但这可能真的有效:

  Film.List().OrderedBy("HeaderItem.Position,Title");

如果这不起作用,恐怕您必须在 ORDER BY 子句中使用 CASE 语句创建视图或执行临时 SQL。

【讨论】:

  • 好的,这很好,但是在另一个查询中,我们现在不能只选择具有 HeaderItem 的电影。 HAS 或 IS NOT NULL 不起作用。
【解决方案2】:

好的,我想通了。

首先,我将 Film 和 HeaderItem 之间的关系更改为 OneToMany。

然后我用了

Film.OrderedList("$ISNULL(HeaderItem.ShowOnTopInCategory, 0)-, Top10, MovieTitle");

首先按 headerItems 获取电影顺序列表,然后是其余的。

效果很好。顺便说一句,ISNULL 前面的 $-sign 避免了 ISNULL 被 CoolStorage SQL 解析器替换。

【讨论】:

    猜你喜欢
    • 2017-07-21
    • 2020-09-22
    • 2015-06-20
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多