c# - 如何查询 Sharepoint 列表中每个值的最大 ID?

标签 c# web-services sharepoint wss

我想通过 Web 服务查询一个名为 valueList 的 Sharepoint 2007 列表,并找到每个列表项的最新版本,因此给出这个列表:

ID | Value
----------
1  | 101
2  | 305
3  | 102
4  | 101
5  | 305
6  | 101

我希望我的查询返回:

ID | Value
----------
3  | 102
5  | 305
6  | 101

在 Access SQL 中,我会这样做:

select v1.* from valueList v1
inner join 
(select value, max(id) as maxID from valueList group by value) v2
on v1.id=v2.maxID

到目前为止,我在 C#/CAML/Sharepoint Web 服务中执行此操作的唯一方法似乎是运行 CAML 查询以按 value 对我的列表项进行分组并按 对它们进行排序ID,将查询转储到 DataTable,然后遍历 DataTable 的每一行,为每个 value 选择最后一行。代码如下:

//dataHandler constructor initializes Web Services Lists() object
dataHandler dh = new dataHandler();

string[] fields = { "ID", "value"};
string query =
           "<GroupBy collapse='true'>" +
              "<FieldRef Name='value' />" +
           "</GroupBy>" +
           "<OrderBy>" +
              "<FieldRef Name='ID' />" +
           "</OrderBy>";

DataTable listTable = dh.listToDataTable("valueList", fields, query);

//copy listTable structure to blank resultTable
DataTable resultTable = listTable.Clone();

//initialize value    
int value = (int)Convert.ToDouble(listTable.Rows[0][1]);

for (int ctr = 0; ctr < listTable.Rows.Count; ctr++)
{

    //check to see if we've gone onto a new 'value', if so get previous row
    if (value != (int)Convert.ToDouble(listTable.Rows[ctr][1]) )
    {
        resultTable.ImportRow(listTable.Rows[ctr - 1]);
        value = (int)Convert.ToDouble(listTable.Rows[ctr][1]);
    }

    //get the last row
    if (ctr == listTable.Rows.Count - 1)
    {
        resultTable.ImportRow(listTable.Rows[ctr]);
    }

}

(int)Convert.ToDouble 是因为该字段作为字符串存储在 DataTable 中,例如1234 存储为“1234.0000”。

这似乎不必要地复杂;有没有更直接的方法来完成我所追求的?如果有更简单的方法,我不需要使用 DataTables 或 CAML。

最佳答案

看起来您正在对列表进行自己的版本控制?如果您只是使用 SharePoint 版本控制,那么很容易获得最新版本。 :)

无论如何,CAML 非常有限,在 2007 年没有连接 (in 2010 you have joins)。除非您对列表进行某种预处理。我认为这是不可能的。

关于c# - 如何查询 Sharepoint 列表中每个值的最大 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762785/

相关文章:

c# - REST API 设计 - 使用请求主体删除多个项目

java - 轴2迁移

sharepoint - 带有 SharePoint 的 ADFS 2.0 未被识别为受信任的应用程序并抛出

web-services - SharePoint Web 服务 : test if file exists

C# 文件为空,创建实例时崩溃。

c# - 使用通用类定义导入数据文件

c# - 整行 telerik 的绑定(bind)背景(颜色):GridViewDataControl WPF control

c# - 向网络服务添加参数是否有害?

c# - 如何设计一个包含网络服务结果的类

asp.net - 用于预览的 SharePoint 流文件