2012-08-03 66 views
2

我有一個簡單的類層次結構看起來像這樣:使用TransformResults從RavenDB中選擇分層數據?

public class Top 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public List<Middle> Middles { get; set; } 
} 

public class Middle 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public List<Bottom> Bottoms { get; set; } 
} 

public class Bottom 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
} 

整個事情被保存爲類型的實體「頂」。文檔旨在保留和反映關係/層次結構,但只有一半,但我會僅關注給定關係的「Id」和「Description」。所以,我要運行的查詢類型是

  • 選擇一切之上,
  • 選擇所有中東,
  • 選擇中,其中Top.Id = someValue中
  • 選擇底,其中Top.Id = someValue中和Middle.Id = someValue中

我想結果進行改造,並返回到我這個樣子:

public class Result 
    { 
     public int Id { get; set; } 
     public string Description { get; set; } 
    } 

如何才能實現TransformResults(我認爲這是可以使用的功能)?我已經閱讀了很多例子,但突然間我看到了參數/值,這些參數/值沒有在任何地方聲明,因此我不明白髮生了什麼。

回答

1

TransformResults無法訪問外部世界,因此無法根據您運行的查詢執行邏輯。 當然,你可以扁平化這個結構,但除非你用不同的TransformResults創建多個索引,否則你不能這樣做。 請注意,首先這是一個奇怪的事情,因爲它不符合文檔的標準建模作爲事務邊界。

+0

好的,在這種情況下我應該怎麼做?我把它分開,把Top,Middle和Bottom作爲單獨的文件對待?爲什麼我的方法「奇怪」?它是否過於關係?我只是想了解我做錯了什麼,做什麼是正確的做法。感謝幫助! – user981375 2012-08-06 13:27:30

+0

我想我可能會混淆這些問題。閱讀後http://stackoverflow.com/questions/7829379/ravendb-retrieving-part-of-document?rq=1現場投影產生我想要的。如果我指定我的quey像'var top = session.Query .First(t => t.Id.Equals(1))。Middles.Select(m => new {m.Id,m.Description})。ToList ()'然後我得到所有Middles給定的Top.Id,這正是我想要的。以同樣的方式,我可以一直導航。這工作得很好,但這是做到這一點的方式? – user981375 2012-08-06 17:11:36