今天偶然看到有位同学在帖子上请教如果在列表中去除重复值的问题,从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乐园)交流。