代码之家  ›  专栏  ›  技术社区  ›  Algirdas

Raven数据库按问题排序

  •  0
  • Algirdas  · 技术社区  · 11 年前

    我收集了一些文件:

    {
    "Name": "MyName",
    "LabelKey": "MyLabelKey"
    }
    

    集合中的LabelKey可能为null或不在文档中。如果我尝试使用linq订购此列表:

    session.Query<MyMetaData>().OrderBy(x => x.LabelKey).ToList()
    

    我只得到LabelKey不为null的记录。因此,如果我收集了100个文档,而只有2个具有LabelKey值,那么在我订购后,我将只得到2个。我需要订购所有集合,即使它们的LabelKey为null。如果我尝试检查非空,我会得到异常:

    Could not understand how to translate '(x.LabelKey != null)' to a RavenDB query.
    Are you trying to do computation during the query?
    RavenDB doesn't allow computation during the query, computation is only allowed during index. Consider moving the operation to an index.
    

    有什么想法吗?我该怎么订购所有的收藏品?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Matt Johnson-Pint    11 年前

    方法1

    不要存储null。在进入的过程中,检查是否为null,并用空字符串替换。

    方法2

    创建一个静态索引。在 Map 表达式,使用null合并运算符,例如:

    LabelKey = x.LabelKey ?? string.Empty
    

    然后使用该索引进行查询。