【问题标题】:How to sort and query on child collection in RavenDB?如何在 RavenDB 中对子集合进行排序和查询?
【发布时间】:2019-08-22 04:10:38
【问题描述】:

感谢您的帮助和耐心。 我仍在学习 RavenDB,所以我寻求一些看似简单但经过多次尝试和广泛研究后击败我的帮助。 所以决定在这里寻求帮助...

给定模型:

public class Travel
{
    public string Id { get; set; }
    public string Destination { get; set; }
    public string DriverId { get; set; }
    public Driver Driver { get; set; }
{

public class Driver
{
    public string Id { get; set; }
    public string Name { get; set; }
{

如何按驱动程序名称排序和过滤?

奇怪的是,linq 没有按预期工作:

session.Query<Travel>().Include(travel => travel.DriverId)
    .OrderBy(travel => travel.Driver.Name);

上面的行发出以下 RQL:

from Travels order by Driver.Name include DriverId

这似乎是正确的,但由于某种原因,无论是使用 Linq 还是 RQL,旅行列表都没有按驱动程序名称排序。

我该怎么办?

【问题讨论】:

    标签: c# ravendb


    【解决方案1】:

    我认为您需要将包含语句更改为 include(travel => travel.Driver)。

    【讨论】:

    • 谢谢,但RavenDB docs 说 Include 语句的语法必须使用 Id 字段来完成,如下所示:IList&lt;Order&gt; orders = session.Query&lt;Order&gt;().Include(o =&gt; o.CustomerId).Where(x =&gt; x.TotalPrice &gt; 100).ToList(); foreach (Order order in orders) { // this will not require querying the server! Customer customer = session.Load&lt;Customer&gt;(order.CustomerId); }
    【解决方案2】:

    您是否尝试过添加 ToList?我能够成功获得按司机姓名排序的旅行列表。

    session.Query<Travel>().Include(travel => travel.DriverId)
           .OrderBy(travel => travel.Driver.Name)
           .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2012-02-13
      相关资源
      最近更新 更多