Sharepoint - 按用户ID通过CAML过滤列表

时间:2013-01-24 16:54:15

标签: c# sharepoint-2007 filtering caml sharepoint-list

使用Sharepoint 2007并尝试​​按名为StudentName的字段过滤项目列表:

<Field
ID="{GUID-REDACTED}"
Name="StudentName"
DisplayName="Student Name"
Type="User"
Group="STUDENT COLS" />

目前,这是用于过滤的CAML,当它通过U2U CAML查询生成器运行时,它返回正确的列表项而没有问题,但是当它部署到SharePoint时,它返回整个列表(即没有过滤)。

SPQuery userQuery = new SPQuery();
userQuery.Query = "<OrderBy>
<FieldRef Name='Rank'>
</FieldRef>
</OrderBy>
<Where>
    <Eq>
        <FieldRef Name='StudentName' LookupId='TRUE' />
        <Value Type='Integer'><UserID /></Value>
    </Eq>
</Where>"

SPListItemCollection userProjectBasket = PBL.GetItems(userQuery);

我已经尝试过使用和不使用Query标签,无济于事,我也将userID的类型更改为User作为最后的手段,仍然没有乐趣。

非常难过,所以任何意见都热烈欢迎。感谢。

2 个答案:

答案 0 :(得分:2)

OrderBy子句需要在Where子句之后:

userQuery.Query = 
@"<Where>
    <Eq>
        <FieldRef Name='StudentName' LookupId='TRUE' />
        <Value Type='Integer'><UserID /></Value>
    </Eq>
</Where>
<OrderBy>
    <FieldRef Name='Rank'/>
</OrderBy>";

答案 1 :(得分:-2)

很好的答案 - 但请注意一件事 - 在使用SPQuery对象时,绝不指定标记(这些标记内部包含在SPQuery.Query对象中)。

此外,您仍然可以使用U2U CAML创建器为您节省构建查询的时间(http://www.u2u.be/Tools/SharePointCamlQueryBuilder.aspx);虽然它是为2007年制造的,但它也适用于2010年。

David Sterling / SICG - http://www.sterling-consulting.com