2013-04-05 3 views
0

J'ai collection de documents:ordre Raven db par émission

{ 
"Name": "MyName", 
"LabelKey": "MyLabelKey" 
} 

Dans la collection labelKey pourrait être nul ou ne pouvait pas être dans le document. Si je tente de commander cette liste à l'aide LINQ:

session.Query<MyMetaData>().OrderBy(x => x.LabelKey).ToList() 

Je reçois seulement des documents qui ont labelKey non nul. Donc, si j'ai une collection de 100 documents et seulement 2 ont des valeurs LabelKey, après je commande, je ne recevrai que 2. J'ai besoin de commander toute la collection, même si elles ont LabelKey null. Si j'essaie de vérifier non nul Je reçois exception:

Could not understand how to translate '(x.LabelKey != null)' to a RavenDB query. 
Are you trying to do computation during the query? 
RavenDB doesn't allow computation during the query, computation is only allowed during index. Consider moving the operation to an index. 

Toute idée comment puis-je commander toute la collection?

Répondre

1

Approche 1

Ne pas stocker les valeurs NULL. Sur le chemin, vérifiez null et remplacez par une chaîne vide.

Approche 2

Créer un index statique. Dans l'expression Map, utilisez l'opérateur coalescent null, tels que:

LabelKey = x.LabelKey ?? string.Empty 

utilisant ensuite requête index.