8

我在 Visual Studio C# 中使用骆驼查询从 sharepoint 2010 的列表中获取项目。列表项有两个我想在 caml 查询中使用的字段。一个是“Section”,另一个是“Order By”。查询需要以某种方式对项目进行排序。首先它需要按 Section (ascending=true) 对其进行排序,然后对每个按 Order By (ascending=true) 进行二次排序。

例如,结果将是这样的:

<item> <Section> <Order By>
item1  A 1
item2  A 3
item3  B 1
item4  B 2
item5  C 5
item6  C 6

到目前为止,我有这个:

        SPQuery query = new SPQuery();
        query.Query = "<Query><OrderBy><FieldRef Name='" + Root_List.Fields.GetField(SECTION_COLUMN).InternalName + "' Ascending='True'/></OrderBy></Query>";
        item_collection = Root_List.GetItems(query);

但是我如何应用二级排序?

注意:Section 是一个字符串字段,order by 是一个数字字段。

4

4 回答 4

14

根据 MSDN 上的此页面,您可以在 OrderBy 元素中包含多个 FieldRef:

http://msdn.microsoft.com/en-us/library/ms467378.aspx

给出的例子是:

<OrderBy>
  <FieldRef Name="Newcomers"/>
  <FieldRef Name="Years" Ascending="FALSE"/>
  <FieldRef Name="Location"/>
</OrderBy>
于 2012-11-18T03:55:51.403 回答
1

我使用 CAML Builder,它让生活变得更加轻松,尤其是当您有困难的查询时,您可以从这里获得它:

http://www.u2u.be/res/tools/camlquerybuilder.aspx

2007 版与 2010 版配合得很好,我每天都使用它

于 2012-11-21T10:38:23.933 回答
0

尝试创建将要排序的列连接在一起的计算列。然后按新的计算列对您的列表进行排序。

http://msdn.microsoft.com/en-us/library/bb862071(v=office.14).aspx

于 2012-11-17T07:59:27.847 回答
0

就我而言,起初似乎上述答案不起作用。但真正的问题是因为我后来将它们转换为 DataTable 并使用以下脚本对它们进行排序,并且 CategoryPosition 的类型不是 int 并且默认使用字符串类型,它将在 1 之后放置 10。

            DataView dv = new DataView(maindt);
            dv.Sort = "Category,CategoryPosition";
            maindt = dv.ToTable();

所以注意这种事情,caml对多重排序的排序就像史蒂夫曼尼娜回答一样工作正常

于 2013-10-30T08:23:51.337 回答