私は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
};
}
}
しかし、私はこれがあることはよく分かりませんSelect
とContains
を使用したコレクションによるクエリは機能しません。さらに、コードはとても醜いので、これはどのようにするべきかの方法ではないと感じています。
私はEventTypeでサブスクリプションを照会し、結果として対応するサブスクライバを持っています。 LINQでは、次のようになります。subscribers.Where(x => x.Subscriptions.Select(c => c.EventType).Contains(myEventType))
注: '地図=加入=>加入者から加入者に新しい を選択し は、 { EventType = subscriber.Subscriptions.Select(x => x.EventType) これは、ドキュメントごとに単一の値を生成し、ファンアウトを回避します –