2012-04-16 6 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; } 
} 

ユーザーは専用のビュー/上記のコードは、私が「フィールド「Administrators_Idを取得し実行すると、私はメンバーに

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

を取得するために、次の手順を実行したときに、彼らは管理者であるメンバーのドキュメントを管理することができますので、 「インデックスが作成されていないフィールドではクエリできません」と私は理解していますが、インデックスの管理者IDを取得しようとするすべてのことが機能していません。

答えて

2

これを試してみてください:

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

はとてもうまくいったこと、ありがとうございます。 –

関連する問題