Я хочу получить элемент из списка, не загружая все элементы списка.
Я знаю, что могу сделать это, позвонив в SPList.getElementbyId(myID), но если я не знаю, существует ли этот myID в списке, как мне его проверить?
Да, я мог бы использовать
SPListItem myItem = myList.Items[myID];
if (myItem == null)
{
// log that we don't have this item
}
Однако таким образом, когда я вызываю myList.Items, все элементы списка загружаются в объект myList (и если у меня есть 40 000 элементов, это действительно проблема производительности), поэтому я бы предпочел использовать:
SPListitem myItem = myList.getElementById(myID);
Таким образом, я не буду называть свойство Items, и нам не нужно будет загружать эти элементы.
Теперь проблема в том, что метод getElementById вызовет исключение, если этот идентификатор не присутствует в списке. Помещать его в статус try/catch - не решение, потому что мы могли бы захотеть проверить несколько сотен идентификаторов, и обработка всех их бросков снова приведет к проблемам с производительностью.
Есть ли еще идеи проверить наличие элемента с заданным идентификатором?





Вы можете создать запрос со всеми идентификаторами, которые выполняются при проверке, и сравнить возвращенный список с идентификаторами, которые вы проверяете, и определить, какие из них действительны, а какие нет.
Таким образом, вы получаете только то, что вам нужно, но все еще находите пропавшие.
И запрос не загрузит все содержимое Items? Спасибо за подсказку! Любые другие идеи будут оценены.
Да, SPQuery - это способ. Ваш запрос может выглядеть так: <Where> <Eq> <FieldRef Name = 'ID' /> <Value Type = 'Counter'> "+ ID +" </value> </Eq> </Where>