我是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
};
}
}
但我不确定这是我需要的,因为使用Select
和Contains
按集合查询并不起作用。此外,代码看起来很丑陋,我觉得这不是应该的方式。
因此,我想通过EventType查询订阅,并将结果作为相应的订阅者。在LINQ中,它看起来像这样:subscribers.Where(x => x.Subscriptions.Select(c => c.EventType).Contains(myEventType))
答案 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();