4

Member というドキュメント エンティティを持つ RavenDB mvc アプリケーションがあります。各メンバー文書には、管理者と見なされるユーザーのリストがあります。そのメンバー ドキュメントを表示および管理できるのは、そのメンバーだけです。ページの 1 つでメンバー検索を行い、検索を支援するためのインデックスを作成しました。

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

上記のコードを実行すると、「The field 'Administrators_Id' is not indexed, cannot query on fields that are not indexed」というメッセージが表示されますが、これは理解できますが、インデックスで管理者の ID を取得しようとしてもうまくいきませんでした。この時点で動作させます。

4

1 に答える 1

2

これを試して:

    Map = members => from member in members
                     select new {member.Title, Administrators_Id = members.Administrators.Select(x=>x.Id)};
于 2012-04-17T07:58:49.717 に答える