【问题标题】:SharePoint 2013 CAML query OrderBy not sorting properlySharePoint 2013 CAML 查询 OrderBy 未正确排序
【发布时间】:2015-07-08 20:51:52
【问题描述】:

我正在使用 CAML 查询从列表中获取一些项目。它将项目拉入数据表,然后将其设置为 gridview 控件的数据源。

一切正常,直到我意识到它使用 ID 字段对项目进行排序。我想按字段 Target_x0020_Id 排序,所以我按顺序排序,但是添加它时它不会改变行为。

这是我的查询:

WhereEqFieldRefName='Target_x0020_Id' 值类型='Text'900/Value/EqWhereOrderByFieldRef Name='Target_x0020_Id'/FieldRef/OrderBy

我唯一添加的是 orderby 元素。 (抱歉,我在发布代码时遇到了一些问题,但没有尝试在帖子中呈现)

【问题讨论】:

    标签: sharepoint caml


    【解决方案1】:

    我只能假设这是您正在使用的 CAML

    <Where>
      <Eq>
        <FieldRefName='Target_x0020_Id'>
        <Value Type='Text'>900</Value>
      </Eq>
    <Where>
    <OrderBy>
      <FieldRef Name='Target_x0020_Id'></FieldRef>
    </OrderBy>
    

    我看到三个明显的错误。

    1. caml 的 &lt;Eq&gt; 部分的 FieldRef 和 Name 之间缺少空格。
    2. 结束 &lt;where&gt; 缺少正斜杠。
    3. &lt;OrderBy&gt; 中的 FieldRef 标记不正确。它会自动关闭

    这应该是正确的caml

    <Where>
      <Eq>
        <FieldRef Name='Target_x0020_Id'>
        <Value Type='Text'>900</Value>
      </Eq>
    </Where>
    <OrderBy>
      <FieldRef Name='Target_x0020_Id' />
    </OrderBy>
    

    我确实看到您要返回 Target_x0020_Id 等于 900 的所有项目,然后按 Target_x0020_Id 对所有这些项目进行排序。由于该字段始终为 900,因此您的排序将无法正常工作。

    另外,Target_x0020_Id 真的是一个文本字段吗?如果是数字,则应将类型更改为“数字”而不是“文本”。

    【讨论】:

    • 我实际上有你发布的内容。我不得不编辑它,因为 SO 一直在格式化它,所以它没有显示出来。
    • 我注意到的一件事是您限制了目标 id 字段为 900 的所有返回项目,然后按同一字段排序。本质上,您按 900 排序。
    • 谢谢,我才意识到你是对的。我使用的是基于 URL 的值。我将它切换到标题字段,现在它可以正确排序了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多