2017-09-01 7 views
3

Je souhaite interroger une entité qui contient des propriétés dynamiques avec RavenDb 4.0.0-beta-40018 mais je ne suis pas sûr de la façon de le faire.RavenDB (4.0-beta): Comment rechercher les attributs dynamiques de recherche plein texte

class Foo { 
    public int Id { get; set; } 
    public DateTime CreatedAt { get; set; } 
    public string Name { get; set; } 
    public dynamic Attributes { get; set; } 
} 

{ 
    "Attributes": { 
     "IsFeatured": true 
    }, 
    "CreatedAt": "2017-08-30T15:53:21.1881668Z", 
    "Name": "Featured Foo"  
} 

C'est la requête que j'ai essayé d'utiliser.

const string propertyName = "IsFeatured"; 

var results = session.Query<Foo>() 
     .Where(x => x.Attributes != null) 
     .Where(x => x.Attributes[propertyName] != null) 
     .Where(x => x.Attributes[propertyName] == true); 

Malheureusement, je ne peux même pas compiler ce code comme je reçois une erreur de compilation (Error: An expression tree may not contain a dynamic operation).
Je ne pense pas que ce soit une bonne approche pour chercher (avec ravendb) dans les attributs dynamiques. Y a-t-il de meilleures approches?

+1

En fait, une bonne question. Je crois jusqu'à RavenDB 3.5 vous pouvez utiliser 'var results = DocumentSession.Advanced.LuceneQuery () .Where (" Attributes.IsFeatured: true ") .ToList();', mais depuis LuceneQuery est dépréciée en faveur de RQL Je n'ai aucune idée de comment cela se fait maintenant. –

+0

FYI: Raven Query Language (RQL) n'est pas dans Raven 3.5. Ce sera à Raven 4.0. –

Répondre

5

Cela devrait le faire:

DocumentSession.Advanced.DocumentSession<Foo>() 
    .WhereEquals("Attributes.IsFeatured", true) 
    .ToList() 
+1

Je l'accepte, mais je n'ai pas trouvé de référence à 'DocumentSession.Advanced.DocumentSession'. Tu m'as aidé à continuer mon chemin. Après un peu de recherche, j'ai trouvé cette 'attente session.Advanced.AsyncDocumentQuery (). WhereEquals (" Attributes.IsFeatured ", true)' qui fonctionne pour moi. –