2012-04-16 120 views
4

我有一個RavenDB的mvc應用程序,它具有一個名爲Member的文檔實體。每個會員文檔都有一個被認爲是管理員的用戶列表。只有他們可以查看和管理該會員文檔。在其中一個頁面上,我有一個成員搜索並創建了一個索引來幫助搜索。試圖通過索引查詢RavenDB實體的集合

public class Members_ByName : AbstractIndexCreationTask<Member> 
{ 
    public Members_ByName() 
    { 
     Map = members => from member in members select new {member.Title}; 
     Indexes.Add(x => x.Title, FieldIndexing.Analyzed); 
     Sort(x => x.Title, SortOptions.String); 
    } 
} 

public class UserReference 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

public class Member 
{ 
    public string Id { get; set; } 
    public string Title { get; set; } 
    public ICollection<UserReference> Administrators { get; set; } 
} 

由於用戶只能查看/管理他們在哪裏,當我做以下,以獲得會員

RavenQueryStatistics stats; 
var query = RavenSession.Query<Member, Members_ByName>().Statistics(out stats); 
query = query.Where(x => x.Title.StartsWith("anything")); 
query = query.Where(x => x.Administrators.Any(y => y.Id == CurrentUser.Id)); 
var list = query.OrderBy(x => x.Title).Paging(CurrentPage, Configuration.DefaultPage, CurrentPageSize).ToList(); 

當上面的代碼運行,我得到「字段「管理員會員文檔Administrators_Id '沒有編入索引,無法在未編入索引的字段上查詢「,據我瞭解,但我試圖在索引中獲取管理員標識的每一件事都沒有奏效,也不知道如何使它在這一點上起作用。

回答

2

試試這個:

Map = members => from member in members 
        select new {member.Title, Administrators_Id = members.Administrators.Select(x=>x.Id)}; 
+0

謝謝你,偉大的工作。 – 2012-04-17 12:22:35