【发布时间】:2013-09-27 21:39:16
【问题描述】:
我在 RavenDb 中存储所有从基类继承的对象,并且我使用 Multi-Map 索引来搜索所有子类型,如下所示:
public class BaseRequest
{
public Guid Id { get; set; }
public string RequestName { get; set; }
public DateTime RequiredDate { get; set; }
}
public class RequestA: BaseRequest
{
public string SomethingForA { get; set; }
}
public class RequestB : BaseRequest
{
public int SomethingForB { get; set; }
}
public class AllRequests: AbstractMultiMapIndexCreationTask
{
public AllRequests()
{
AddMap<RequestA>(requests => from req in requests select new {req.RequestName, req.RequiredDate});
AddMap<RequestB>(requests => from req in requests select new {req.RequestName, req.RequiredDate });
}
}
我这样搜索它:
public BaseRequest[] Search(string requestType, string requestName, DateTime? requestDate = null) {
var q = RavenSession.Query<BaseRequest, AllRequests>();
if (!string.IsNullOrEmpty(requestName)) {
q = (IRavenQueryable<BaseRequest>)Queryable.Where(q, x => x.RequestName == requestName);
}
if (requestDate.HasValue) {
q = (IRavenQueryable<BaseRequest>) Queryable.Where(q, x => x.RequiredDate == requestDate);
}
return q.ToArray();
}
我想做的是通过请求的 CLR-Type 进一步过滤结果。是否可以使用“Raven-Entity-Name”元数据字段来执行此操作,如果可以,如何操作?
我知道我可以只使用Query<RequestA>() 等,但以后可能需要按多种类型进行过滤,这些类型将由用户动态选择。
注意:我真正想做的是使用索引来拉回给定某个 RequestName 的请求,但只返回 RequestA(后来只返回 RequestA、RequestC 和 RequestD)。我不想做多个查询来单独取回每种类型,我想做一个查询,通过参数查询,有时输入。
系统的设计使得每个月左右都会添加请求类型,最终我们可能会得到几百种不同的类型。我想动态搜索一组具有给定参数的特定类型。
【问题讨论】:
标签: polymorphism ravendb