2012-11-17 12 views
7

Sto utilizzando la query di cammello in Visual Studio C# per ottenere elementi da un elenco da SharePoint 2010. Le voci di elenco hanno due campi che desidero utilizzare nella query caml. Uno è "Sezione" e l'altro è "Ordina per". La query deve ordinare gli articoli in un certo modo. Per prima cosa ha bisogno di ordinarlo per Sezione (ascendente = vero), e poi per ognuno di uno ordinamento secondario per Ordine Per (crescente = vero).Come eseguire il double orderby in CAML Query?

Ad esempio, il risultato sarebbe simile a questo:

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

Finora ho questo:

 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); 

Ma come faccio ad applicare l'orderby secondario?

Nota: Sezione è un campo stringa e l'ordine per è un campo numerico.

+1

forse questo può aiutare: http://www.u2u.be/Tools/wincamlquerybuilder/CamlQueryBuilder.aspx – Yahia

risposta

13

Per questa pagina su MSDN, è possibile includere più di una FieldRef all'interno dell'elemento OrderBy:

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

L'esempio dato è:

<OrderBy> 
    <FieldRef Name="Newcomers"/> 
    <FieldRef Name="Years" Ascending="FALSE"/> 
    <FieldRef Name="Location"/> 
</OrderBy> 
1

io uso CAML Builder, rende la vita molto più facile soprattutto quando hai domande difficili, puoi ottenerle da qui:

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

l'edizione 2007 funziona bene con il 2010, lo uso tutti i giorni

+0

http: // sharepoint .biwug.be/SitePages/Caml_Designer.aspx –

0

nel mio caso in un primo momento sembra che la risposta di cui sopra non funziona. ma il vero problema era perché ho poi convertirli in DataTable e utilizzare il seguente script per ordinare loro e il tipo di CategoryPosition non ero int ed ero default con i tipi di stringa che porrebbe 10 dopo 1.

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

così guarda questo genere di cose e l'ordinamento su più ordinamenti funziona come Steve Mannina rispondi allo

Problemi correlati