【问题标题】:SPQuery : Joining lists and where in the foreign listSPQuery:加入列表和外部列表中的位置
【发布时间】:2011-05-02 14:10:49
【问题描述】:

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

你有什么想法吗? 谢谢!

【问题讨论】:

    标签: c# sharepoint caml sharepoint-api spquery


    【解决方案1】:

    好的,我找到了答案:

    您甚至可以在外部列表中添加 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 链接中列出的类型...

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 2018-04-23
        相关资源
        最近更新 更多