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

OK私は私の答えを見つけました:

外部リストにもwhere句を追加できますが、ターゲットフィールドをブール値にすることはできません:(サポートされているタイプ(ProjectedFields)があるためです。実際、特定のフィールドで外部リストをフィルタリングする場合は、 SPQueryのQueryプロパティのwhere句で認識されるように、projectedfields要素で宣言します。

たとえば、前のケースでは、

 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 に答える