2011-09-09 136 views
1

我想知道是否可以對從SharePoint返回的列表項(使用客戶端對象API)進行排序,以便它們按層次順序排列,而不是按照它們創建的順序排列。CAML Query for retrieveing ListItems in the hierarchal order

這是需要保持文件夾結構不變。因此,例如,如果這是一個結構:

folder001 
-folder001_sub001 
--item001 
--item002 
-folder002_sub002 
--folder002_sub002_sub001 
---item003 
--item004 
-item005 

會以相同的順序,作退回或者至少這種方式(項目第一,然後文件夾):

folder001 
-item005 
-folder001_sub001 
--item001 
--item002 
-folder002_sub002 
--item004 
--folder002_sub002_sub001 
---item003 

這可能與CAML查詢?默認是爲了創建它們而返回的東西(通過列表中的索引號)

預先感謝您!

+0

另外,我希望「訂單」字段的值會有所幫助,但我不知道它是如何工作的:( – SpaceBear

回答

1

在這種情況下,我寧願用客戶端對象模型代替caml。你可以這樣做(未經測試!):

void RecursiveListFolder(Folder folder, int indent = 0) 
{ 
    clientContext.Load(folder.Folders); 
    clientContext.ExecuteQuery(); 
    foreach (Folder folder in folder.Folders) 
    { 
     Console.WriteLine(new string(' ', indent) + folder.Name); 
     RecursiveListFolder(folder, indent + 1); 
    } 

    clientContext.Load(folder.Files); 
    clientContext.ExecuteQuery(); 
    foreach (File file in folder.Files) 
    { 
     Console.WriteLine(new string(' ', indent) + file.Name); 
    } 
} 

這種方法會以這種方式使用:

string siteUrl = "http://MyServer/sites/MySiteCollection"; 

ClientContext clientContext = new ClientContext(siteUrl); 
Web web = clientContext.Web; 
clientContext.Load(web.Lists); 
clientContext.ExecuteQuery(); 
List list = web.Lists["MyList"]; 

RecursiveListFolder(list.RootFolder); 
+0

哈哈,其實這個確實有效,有時候明顯的解決方案在迷霧中丟失了...... – SpaceBear

+0

順便說一句,謝謝!!! – SpaceBear