SPQuery: присоединяющиеся списки и где в иностранном списке

Привет разработчикам Sharepoint!

Вы когда-нибудь пытались сделать соединение между списками, и в обоих этих списках нужно было поместить предложение 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 ответа

Решение

Используйте вычисляемый столбец, который переводит логическое значение в текст.

Хорошо, я нашел свой ответ:

Вы можете добавить предложение where даже в внешний список, но целевое поле не может быть логическим:(, потому что существуют поддерживаемые типы ( ProjectedFields). На самом деле, если вы хотите отфильтровать внешний список по определенному полю, вы можете захотеть объявите его в элементе проецируемых полей, чтобы они распознавались в предложении where в свойстве Query объекта SPQuery.

Например, в предыдущем случае

 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...

слишком плохо для меня это было логическое значение, я думаю, я должен иметь дело с временными списками в памяти, если у вас нет других предложений...

Другие вопросы по тегам