2012-04-16 80 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