2015-05-11 103 views
0

我有一個項目列表{Id, Name, CategoryId}和類別列表{Id, Name, IsActive}RavenDB計數索引包括零值

如何獲取列表{CategoryId, Count}包括具有零個項目的類別

目前,我有這樣的索引:

public class CategoryCountIndex : AbstractIndexCreationTask<Item, CategoryCountIndex.Result> 
{ 
    public class Result 
    { 
     public string CategoryId { get; set; } 
     public int Count { get; set; } 
    } 

    public CategoryCountIndex() 
    { 
     Map = items => from item in items 

      select new Result 
      { 
       CategoryId = item.CategoryId, 
       Count = 1 
      }; 

     Reduce = results => from result in results 
      group result by result.CategoryId 
      into c 
      select new Result 
      { 
       CategoryId = c.Key, 
       Count = c.Sum(x => x.Count) 
      }; 
    } 
} 

什麼是改善/改變,以便有沒有項目類別我的解決方案的最佳方式是什麼?

回答

1

我刪除了我以前的答案,因爲它證明是不正確的。在這種情況下,您實際上可以使用MultiMap/Reduce索引來解決您的問題。

嘗試使用以下指標:

public class Category_Items : AbstractMultiMapIndexCreationTask<Category_Items.ReduceResult> 
{ 
    public class ReduceResult 
    { 
     public string CategoryId { get; set; } 
     public int Count { get; set; } 
    } 

    public Category_Items() 
    { 
     AddMap<Item>(items => 
      from item in items 
      select new 
      { 
       CategoryId = item.CategoryId, 
       Count = 1 
      }); 

     AddMap<Category>(categories => 
      from category in categories 
      select new 
      { 
       CategoryId = category.Id, 
       Count = 0 
      }); 


     Reduce = results => 
      from result in results 
      group result by result.CategoryId into g 
      select new ReduceResult 
      { 
       CategoryId = g.Key, 
       Count = g.Sum(x => x.Count) 
      }; 
    } 
} 

這將導致以下(三大類,但一個沒有項目): Query result from index

現在你可以使用一個結果變壓器,如果你想顯示類別名稱。

希望這會有所幫助!

+0

這正是我所需要的。謝謝。 – limpo