SPQuery:加入列表以及外部列表中的位置

时间:2011-05-02 14:10:49

标签: c# sharepoint caml sharepoint-api spquery

Hello Sharepoint开发人员!

您是否尝试过在列表之间以及放置where子句所需的两个列表之间进行连接? 我可以在第一个列表中执行此操作,但无法找到如何将where放在外部列表中。

我尝试了几个像这样的解决方案:

using (SPWeb web = sps.OpenWeb())
            {
                SPList spl = web.GetList(customers);
                SPQuery query = new SPQuery();
                query.Query = "<Where><Eq><FieldRef Name='Suspended'/><Value Type='Boolean'>0</Value></Eq></Where>";
               query.Joins=@"<Join Type='Inner' ListAlias='CountryList'><And><Eq><FieldRef Name='Country' RefType='Id'/><FieldRef List='CountryList' Name='ID'/></Eq><Eq><FieldRef List='CountryList' Name='Continent' /><Value Type='Text'>Europe</Value></Eq>
                        </And></Join>";
                ....

但这不起作用。我希望所有未被停止的客户都来自欧洲的所有城镇(另一个名单)。因此,我需要在主要列表(spl)中的某个位置获取未被暂停的客户以及外国列表中的位置以仅从欧洲获得城镇。我无法将我的位置放在Join元素中。我试图将它放在查询中,给出列表别名,但它也不起作用。

你有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

好的,我找到了答案:

您甚至可以在外部列表中添加where子句,但目标字段不能是布尔值:(因为支持的类型(ProjectedFields)。 实际上,如果要在其特定字段上过滤外部列表,您可能希望在投影字段元素中声明它,以便在SPQuery的Query属性中的where子句中识别它们。

例如,在前一种情况下,

 SPList spl = web.GetList(customers);
            SPQuery query = new SPQuery();
            query.Query = @"<Where><And>
<Eq><FieldRef Name='Suspended'/><Value Type='Boolean'>0</Value></Eq>
<Eq><FieldRef Name='ContinentCountryList' List="CountryList"/><Value Type='Text'>Europe</Value></Eq>
</And></Where>";
               query.Joins=@"<Join Type='Inner' ListAlias='CountryList'><Eq><FieldRef Name='Country' RefType='Id'/><FieldRef List='CountryList' Name='ID'/></Eq>
                     </Join>";
    query.ProjectedFields = "<Field Name='ContinentCountryList' Type='Lookup' List='CountryList' ShowField='Continent'/>

现在这项工作正常我将不会被欧洲城镇的客户暂停。所以我必须在projectedFields元素中引用我的外部字段。但它只适用于上面msdn链接中列出的类型......

对我来说太糟糕了,这是一个布尔值,我想我必须处理内存中的临时列表,除非你有任何其他建议......

答案 1 :(得分:0)

使用计算列将布尔值转换为文本。