Sharepoint lookup字段的关联列表查询

Sharepoint lookup字段的关联列表查询

考虑到对lookup字段的CAML查询的模糊,在此举例验证。

1. 假设我有两个列表,薪资列表(Salary)和员工列表(Employee)。而薪资列表需要引用到员工编号,即lookup。

2. 薪资列表包含员工编号(Employee)和薪资(Salary)。

Sharepoint lookup字段的关联列表查询

3. 员工列表包含员工编号(Employee), 员工名字(EmployeeFullName)和部门名称(EmployeeDepartment)

Sharepoint lookup字段的关联列表查询

 

4. 现在我需要用CAML语句查询Salary列表, 并包含员工名字和部门,这里就需要用到列表的关联查询,具体如下:

a. 首先我用caml语句查询Salary列表。

SPQuery query = new SPQuery();
            query.Query = @"<Where>
                            <Gt>
                                <FieldRef Name=‘Salary‘/>
                                <Value Type=‘Text‘>2000</Value>
                            </Gt>
                        </Where>";

注意:该查询语句返回的是薪资大于2000的薪资信息。


b. 然后在关联到Employee列表。

query.Joins = @"<Join Type=‘LEFT‘ ListAlias=‘Employee‘>
                                <Eq>
                                    <FieldRef Name=‘Employee‘ RefType=‘Id‘/>
                                    <FieldRef  List=‘Employee‘ Name=‘Id‘/>
                                </Eq>
                            </Join>";

注意:<FieldRef Name=‘Employee‘ RefType=‘Id‘/>指定薪资列表lookup字段名称,RefType永远是Id; <FieldRef  List=‘Employee‘ Name=‘Id‘/> 指定了关联列表同名词,Name永远是Id。

c. 关联Salary列表里面引用的字段

 query.ProjectedFields = @"<Field Name=‘FullName‘ Type=‘Lookup‘ List=‘Employee‘ ShowField=‘EmployeeFullName‘/>";


注意: ShowField 指定员工名字字段,Name是该字段的引用名称, 这样才能将FullName在返回结果中使用。

d. 显示需要的字段信息。 

query.ViewFields = @"<FieldRef Name=‘Employee‘/> <FieldRef Name=‘Salary‘/><FieldRef Name=‘FullName‘/>";

 

5. 以下是完整代码:

SPQuery query = new SPQuery();
            query.Query = @"<Where>
                            <Gt>
                                <FieldRef Name=‘Salary‘/>
                                <Value Type=‘Text‘>2000</Value>
                            </Gt>
                        </Where>";
            query.Joins = @"<Join Type=‘LEFT‘ ListAlias=‘Employee‘>
                                <Eq>
                                    <FieldRef Name=‘Employee‘ RefType=‘Id‘/>
                                    <FieldRef  List=‘Employee‘ Name=‘Id‘/>
                                </Eq>
                            </Join>";
            query.ProjectedFields = @"<Field Name=‘FullName‘ Type=‘Lookup‘ List=‘Employee‘ ShowField=‘EmployeeFullName‘/>";
            query.ViewFields = @"<FieldRef Name=‘Employee‘/> <FieldRef Name=‘Salary‘/><FieldRef Name=‘FullName‘/>";
            string str = "";
            using(SPSite site = new SPSite("http://dev-sp")){
                SPWeb web = site.RootWeb;
                SPList list = web.Lists.TryGetList("Salary");
                SPListItemCollection items = list.GetItems(query);
                foreach(SPListItem item in items){
                    str += item["Employee"].ToString() + ":" + item["Salary"] + "-" + item["FullName"].ToString() + "\n";
                }
            }
            Console.WriteLine(str);
            Console.ReadLine();

6. 查询结果:

Sharepoint lookup字段的关联列表查询

注意: 由于员工是lookup字段类型,所以会有字符出现,这里我没有做处理,需要的可以自行更改。

 

 

 

 

Sharepoint lookup字段的关联列表查询

上一篇:BRIEF特征提取(理解篇)


下一篇:xcode : could not load inserted library: /usr/lib/libgmalloc.dylib 的解决