通过RavenDB中的嵌套集合元素查询条目

时间:2017-09-15 12:42:39

标签: ravendb nosql

我是RavenDB的新手,我正在努力解决这个简单的(我猜)问题。 我有一个包含订阅集的订阅者。我希望通过Subscription的字段进行搜索,并返回相关的订阅者。

以下是简化的课程示例:

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 个答案:

答案 0 :(得分: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();
相关问题