【问题标题】:Using TransformResults to select hierarical data from RavenDB?使用 TransformResults 从 RavenDB 中选择分层数据?
【发布时间】:2013-05-31 09:36:19
【问题描述】:

我有一个简单的类层次结构,如下所示:

public class Top
{
    public string Id { get; set; }
    public string Description { get; set; }
    public List<Middle> Middles { get; set; } 
}

public class Middle
{
    public string Id { get; set; }
    public string Description { get; set; }
    public List<Bottom> Bottoms { get; set; } 
}

public class Bottom
{
    public string Id { get; set; }
    public string Description { get; set; }
}

整个事物被保存为“Top”类型的实体。文档旨在保留和反映关系/层次结构,但有一半但有时我会只关心给定关系的“Id”和“Description”。所以,我想要运行的查询类型是

  • 全选顶部,
  • 全选中间,
  • 选择中间,其中 Top.Id=somevalue
  • 选择底部,其中 Top.Id=somevalue 和 Middle.Id=somevalue

我希望将结果转换并返回给我,如下所示:

public class Result
    {
        public int Id { get; set; }
        public string Description { get; set; }
    }

如何实现 TransformResults(我认为这是可以使用的功能)来实现这一点?我已经阅读了很多示例,但突然之间我看到了没有在任何地方声明的参数/值,因此我不明白发生了什么。

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    TransformResults 无法访问外部世界,您无法根据您运行的查询执行逻辑。 当然,您可以展平此结构,但除非您将创建具有不同 TransformResults 的多个索引,否则您不能这样做。 请注意,这首先是一件奇怪的事情,因为它不符合将文档作为事务边界的标准建模。

    【讨论】:

    • 好的,那么在这种情况下我应该怎么做呢?我应该把它分开并将顶部、中间和底部视为单独​​的文档吗?为什么我的方法“奇怪”?是不是太有关系了?我只是想了解我做错了什么以及正确的方法是什么。感谢您的帮助!
    • 我想我可能混淆了这些问题。阅读stackoverflow.com/questions/7829379/… Live Projections 后产生了我想要的结果。如果我将我的查询指定为var top = session.Query&lt;Top&gt;.First(t =&gt; t.Id.Equals(1)).Middles.Select(m =&gt; new {m.Id, m.Description}).ToList(),那么我将获得给定 Top.Id 的所有中间人,这正是我想要的。以同样的方式,我可以一直向下导航。这很有效,但这是这样做的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多