2017-09-01 64 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"  
} 

這是我試過使用的查詢。

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

可悲的是,我甚至不能因爲我得到一個編譯錯誤(Error: An expression tree may not contain a dynamic operation)編譯的代碼。
我不認爲這是在動態屬性中搜索(使用ravendb)的好方法。有更好的方法嗎?

+1

其實一個很好的問題。我相信,直到RavenDB 3.5,你可以使用'var results = DocumentSession.Advanced.LuceneQuery () 。Where(「Attributes.IsFeatured:true」) .ToList();',但是由於LuceneQuery被棄用而傾向於RQL我不知道現在如何做到這一點。 –

+0

僅供參考:烏鴉查詢語言(RQL)不在烏鴉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)'這是爲我工作。 –