2013-10-25 6 views
1

Я следующие классызапросов в RavenDB на основе значений из списка в Словаре

public class Project : IWorkflowDocument 
{ 
    public string Id { get; set; } 
    public Dictionary<Type, List<DenormalizedWorkflowReference<IWorkflowDocument>>> Parents { get; set; } 
} 

public class DenormalizedWorkflowReference<T> where T : IWorkflowDocument 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public static implicit operator DenormalizedWorkflowReference<T>(T doc) 
    { 
     return new DenormalizedWorkflowReference<T> 
     { 
      Id = doc.Id, 
      Name = doc.Name 
     }; 
    } 
} 

После сохранения проекта с некоторыми родителями в Db она выглядит следующим образом:

{ 
    "Name": "TestProject", 
    "Parents": { 
    "InterGrowth.Framework.MES.DomainObjects.Company, InterGrowth.Framework.MES.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null": [ 
     { 
     "Id": "companies/225", 
     "Name": "Test Corporation" 
     } 
    ] 
    }, 
    "Children": { 
    "InterGrowth.Framework.MES.DomainObjects.Order, InterGrowth.Framework.MES.DomainObjects, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null": [ 
     { 
     "Id": "orders/97", 
     "Name": "Order_0" 
     } 
    ] 
    } 
} 

Что бы быть правильным запросом, чтобы получить проект по родительскому свойству, если тип и идентификатор известны? Я попытался сделать следующие попытки:

var result = session.Query<Project>().Select(s => s.Parents[typeof (Company)]).Where(y => y.Any(u => u.Id == Company.Id)); 
var result = from project in session.Query<Project>() where project.Parents[typeof(Company)].Any(t=> t.Id == Company.Id) select project; 

ответ

0

Проблема заключается в том, как тип сериализуется и хранится в БД. После того, как я изменил тип в строку класс проект выглядит следующим образом:

public class Project : IWorkflowDocument 
{ 
    public string Id { get; set; } 
    public Dictionary<string, List<DenormalizedWorkflowReference<IWorkflowDocument>>> Parents { get; set; } 
} 

Следующий запрос работает сейчас:

var result = from project in session.Query<Project>() where project.Parents[typeof(Company).Name].Any(t=> t.Id == Company.Id) select project; 
Смежные вопросы