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), чтобы получить не приостановленных клиентов, и где в иностранном списке, чтобы получить города только из Европы. Я не могу поместить свое место в элементе соединения, по-видимому. Я попытался поместить его в запрос, указав псевдоним списка, но он тоже не работает.

у вас есть идея? Благодарность !


person KitAndKat    schedule 02.05.2011    source источник


Ответы (2)


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

person Lou    schedule 06.08.2011

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

Вы можете добавить предложение where даже во внешний список, но целевое поле не может быть логическим :( потому что есть поддерживаемые типы (ProjectedFields). На самом деле, если вы хотите отфильтровать внешний список по его конкретному полю, вы можете объявить его в элементе проецируемых полей, чтобы они распознавались в вашем месте. предложение в свойстве 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...

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

person KitAndKat    schedule 03.05.2011