2009-09-17 12 views
1

Disons que nous avons des films et des HeaderItems. Parfois, un film a un HeaderItem lié à OneToOne mais pas toujours.Tri sur une propriété enfant nullable dans CoolStorage

Maintenant, je veux trier tous les films sur leur titre MAIS je voudrais que les films avec un HeaderItem lié à eux pour trier HeaderItem.Position (si HeaderItem n'est pas nul).

J'ai essayé de mettre en œuvre OneToMany on Films et OneToOne mais je peux faire fonctionner le tri. Il ne peut pas convertir QueryExpression en String ou vice versa.

Des idées sur comment faire cela?

+0

Pouvons-nous voir vos tentatives? – Mark

+0

Il doit donc être trié d'abord par HeaderItem.Position (s'il existe), puis par Title? Cela signifierait que tous les enregistrements avec un HeaderItem viendraient en premier. –

+0

Yup, ce serait l'idée générale. –

Répondre

1

Ok, je l'ai compris. Tout d'abord, j'ai changé la relation entre Film et HeaderItem à un OneToMany.

J'utilisé

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

pour obtenir une liste des commandes films par headerItems d'abord, puis le reste.

Fonctionne très bien. Btw, le $ -sign devant l'ISNULL évite que l'ISNULL soit remplacé par l'analyseur SQL CoolStorage.

0

Je ne l'ai pas essayé, mais cela peut effectivement travailler:

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

Si cela ne fonctionne pas, je crains que vous aurez à créer une vue ou exécuter ad-hoc SQL à l'aide Instructions CASE dans votre clause ORDER BY.

+0

Ok, cela fonctionne bien MAIS dans une autre requête, nous ne pouvons pas seulement sélectionner les films qui ont un HeaderItem maintenant. le HAS ou IS NOT NULL ne fonctionne pas. –

Questions connexes