如何在CAML查询中进行双重命令?

时间:2012-11-17 01:35:40

标签: c# sharepoint-2010 caml

我在visual studio c#中使用camel查询从sharepoint 2010获取列表中的项目。列表项目有两个我想在caml查询中使用的字段。一个是“Section”,另一个是“Order By”。查询需要以某种方式对项目进行排序。首先,它需要按Section(升序=真)对它进行排序,然后按顺序排序(升序=真)。

例如结果如下:

<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 个答案:

答案 0 :(得分:13)

在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>

答案 1 :(得分:1)

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

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

2007版在2010年正常运作,我每天都使用它

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

所以看看这种事情,并且多次排序的caml排序工作正常,如Steve Mannina回答