我在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是一个数字字段。
答案 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回答