2

您好 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 元素中。我试图将它放在查询中,给出列表别名,但它也不起作用。

你有什么想法吗?谢谢 !

4

2 回答 2

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 链接中列出的类型...

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

于 2011-05-03T09:42:29.967 回答
0

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

于 2011-08-06T14:11:09.683 回答