2014-01-13 2 views
1

Я очень новичок в CamlQuery и нуждаюсь в некоторой помощи, чтобы это работало.CamlQuery - Как использовать предложение Where в C#

Я установил инструмент под названием CamlDesigner, чтобы помочь мне сгенерировать XML, необходимый для фильтрации коллекции в Sharepoint, но XML-запрос, который построил CamlDesigner, не работает в моем коде C#. У меня есть поле ID, которое я пытаюсь фильтровать, и я просто хочу получить элемент из Sharepoint, где ID = 1 (или 2 или 3 или что-то еще).

Вот запрос Caml генерируется дизайнером:

<Where> 
     <Eq> 
     <FieldRef Name='ID' /> 
     <Value Type='Counter'>1</Value> 
     </Eq> 
    </Where> 

Вот мой C# код, где я пытаюсь включить этот Caml запрос. C# работает, , но он возвращает каждый элемент из «My SP Coll», а не только возвращает элемент, где ID равен 1.

// Sharepoint web service to retrieve categories items there 
ClientContext clientContext = new ClientContext("https://myweb.dev.com/SP"); 
List oList = clientContext.Web.Lists.GetByTitle("My SP Coll"); 

CamlQuery camlQuery = new CamlQuery(); 
camlQuery.ViewXml = "<Query><Where><Eq><FieldRef Name='ID'/><Value type='Counter'>" + ID.ToString() + "</Value></Eq></Where></Query>"; 
Microsoft.SharePoint.Client.ListItemCollection collListItem = oList.GetItems(camlQuery); 

clientContext.Load(collListItem); 
clientContext.ExecuteQuery(); 

foreach (Microsoft.SharePoint.Client.ListItem oListItem in collListItem) { 
    string ID = oListItem["ID"].ToString(); 
} 

Спасибо за помощь!

ответ

2
  1. Запрос должен быть обернут в <View>...</View> элемента, в дополнение к <Query> элемента.

  2. Сгенерированный запрос, имя поля ID не Id.

На боковой ноте убедитесь, что вы удаляете контекст клиента.

И, конечно же, чтобы получить элемент по ID вы можете обойти весь этот процесс и просто использовать

var item = list.GetItemById(ID); 
+0

Обертка с помощью тегов View была одной из первых вещей, которые я пробовал. К сожалению, он по-прежнему возвращает каждый элемент в коллекции. Кроме того, я исправил «Id». Это было также из-за некоторых тестов, что я просто забыл вернуться к «ID». Спасибо за помощь. – Jagd

+0

@Jagd Я не вижу других ошибок, но вы могли бы просто пойти на себя и использовать «GetItemById» вместо всего этого. – Servy

+0

Я просто собираюсь использовать GetItemById(). Еще раз спасибо! – Jagd

1

Свойство ViewXml просто указывает на вид в списке и не появляется для обработки фильтрации.

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

Смежные вопросы