2017-09-01 16 views
3

RavenDb 4.0.0-beta-40018の動的プロパティを含むエンティティにクエリを実行したいが、それを行う方法がわからない。RavenDB(4.0-beta):動的属性をフルテキスト検索する方法

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"  
} 

これは私が使用しようとしたクエリです。私はコンパイルエラー(Error: An expression tree may not contain a dynamic operation)を取得していますよう

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); 

悲しいことに、私もこのコードをコンパイルすることはできません。
これは、動的属性で(ravendbを使用して)検索するための良いアプローチではないと思います。より良いアプローチがありますか?

+1

良い質問。私はRavenDB 3.5までは、var results = DocumentSession.Advanced.LuceneQuery () .Where( "Attributes.IsFeatured:true") .ToList(); 'を使うことができると信じていますが、LuceneQueryはRQLのために推奨されていません私はこれが今どのように行われているのか分かりません。 –

+0

FYI:Ravenクエリ言語(RQL)はRaven 3.5にはありません。それはRaven 4.0になります。 –

答えて

5

これはそれを行う必要があります:実際に

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

これを受け入れるが、 'DocumentSession.Advanced.DocumentSession'への参照を見つけることができませんでした。あなたは私の道を手伝ってくれました。少しの検索の後、私はこれを見つけた 'await session.Advanced.AsyncDocumentQuery ().WhereEquals(" Attributes.IsFeatured "、true)'私のために働いています。 –

関連する問題