SharePoint的列表中某列去除重復值的一種方法
今天偶然看到有位同學在帖子上請教如果在列表中去除重復值的問題,從09年8月到現在沒有解決(原文),正好最近也在研究SharePoint開發,正好有練習題目了:)
有同學想過用CAML中的Group去獲取,但你會發現執行查詢后(即:SPList.GetItems(SPQuery))的結果集沒有發生變化。而我的嘗試是從列表著手的,后來發現列表對象有個GetDistinctFieldValues方法,經驗證可以解決類似SQL中select distinct的功能。而且用幾行代碼就可以解決問題,也不需要寫循環遍歷的代碼和邏輯。請看下邊:
1 //先確定你要獲取哪欄(列)的不重復值,這里把voteBoxList換成你的列表實例,“得票人”換成你要處理的列名
2 SPField distinctField = voteBoxList.Fields["得票人"];
3 //準備一個二維對象數組做輸出參數來接收列的結果(即你最后要的不重復值)
4 object[,] distinctResult = new object[0,10];
5 //調用GetDistinctFieldValues后distinctResult就是不重復的值,而返回resultCount 就是有多少個值
6 uint resultCount = voteBoxList.GetDistinctFieldValues(distinctField, out distinctResult);
7
2 SPField distinctField = voteBoxList.Fields["得票人"];
3 //準備一個二維對象數組做輸出參數來接收列的結果(即你最后要的不重復值)
4 object[,] distinctResult = new object[0,10];
5 //調用GetDistinctFieldValues后distinctResult就是不重復的值,而返回resultCount 就是有多少個值
6 uint resultCount = voteBoxList.GetDistinctFieldValues(distinctField, out distinctResult);
7
可能這里疑問最多的就是為什么裝結果為什么要用二維數組?這個問題我也知道,呵呵。另外,就是為什么初始化是new object[0,10],10個結果以上怎么辦?細心的也可以知道了,你可以放心,其實[0,0]也行,方法內部做了數組替換的處理,初始是可以裝30個值。最后就是wss的SDK資源實在太少了,像剛剛說的GetDistinctFieldValues方法SDK文檔里面居然一片空白,聯機的MSDN上也是。這個真的是科學都解釋不了的,呵呵。
其實解決一個問題的方案會有很多種,我這里提出其一跟大家交流一下。SharePoint2010聽說4月要Release了,因為時間關系還沒來得及第一時間去體驗,希望各位以后多點來我博客(Ryu666's IT樂園)交流。

浙公網安備 33010602011771號