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