1

私は次のクラスを持っています

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"
      }
    ]
  }
}

タイプとIDがわかっている場合、親プロパティを介してプロジェクトを取得するための正しいクエリは何でしょうか? 次の試みを試みましたが失敗しました:

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;
4

1 に答える 1

0

問題は、Type をシリアライズして DB に格納する方法にあるようです。Type を string に変更すると、プロジェクト クラスは次のようになります。

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;
于 2013-10-26T08:14:46.783 に答える