2017-09-15 7 views
0

私はRavenDBを初めて使用しています。この単純な(おそらく)問題に苦しんでいます。 私はサブスクリプションのコレクションを持つサブスクライバを持っています。サブスクリプションのフィールドで検索し、関連するサブスクライバを返したいとします。ここでRavenDBのネストされたコレクション要素によるエントリの照会

は単純化されたクラスの例です:

public class Subscriber 
{ 
    public string Email { get; set; } 
    public string Name { get; set; } 
    public string Phone { get; set; } 

    public List<Subscription> Subscriptions { get; set; } 
} 

public class Subscription 
{ 
    public Guid Id { get; set; } 
    public string EventType { get; set; } 
} 

それはRavenDBドキュメントに言われているように私には、インデックスを作成しようとしました:

public class Subscriber_BySubscription : AbstractIndexCreationTask<Subscriber> 
    { 
     public Subscriber_BySubscription() 
     { 
      Map = subscribers => from subscriber in subscribers 
           from subscription in subscriber.Subscriptions 
           select new 
           { 
            subscription.EventType, 
            subscription.QueueName 
           }; 
     } 
    } 

しかし、私はこれがあることはよく分かりませんSelectContainsを使用したコレクションによるクエリは機能しません。さらに、コードはとても醜いので、これはどのようにするべきかの方法ではないと感じています。

私はEventTypeでサブスクリプションを照会し、結果として対応するサブスクライバを持っています。 LINQでは、次のようになります。subscribers.Where(x => x.Subscriptions.Select(c => c.EventType).Contains(myEventType))

答えて

1

管理されています。ここで右のインデックスは次のとおりです。

public class Subscriber_BySubscription : AbstractIndexCreationTask<Subscriber> 
    { 
     public class Result 
     { 
      public string EventType { get; set; } 
     } 

     public Subscriber_BySubscription() 
     { 
      Map = subscribers => from subscriber in subscribers 
           from subscription in subscriber.Subscriptions 
           select new 
           { 
            subscription.EventType 
           }; 
     } 
    } 

そして、それは、それが使用されるべき方法は次のとおりです。これは良いだろうという

var results = uow.Session 
    .Query<Subscriber_BySubscription.Result, Subscriber_BySubscription>() 
    .Where(x => x.EventType == eventType) 
    .OfType<Subscriber>() 
    .ToList(); 
+0

注: '地図=加入=>加入者から加入者に新しい を選択し は、 { EventType = subscriber.Subscriptions.Select(x => x.EventType) これは、ドキュメントごとに単一の値を生成し、ファンアウトを回避します –

関連する問題