Есть ли способ определить, соответствует ли один элемент списка SharePoint SPQuery/SPView?
Стандартная функция оповещения в SharePoint позволяет отправлять оповещения только в том случае, если элемент отображается в указанном представлении.
Я хочу применить аналогичную логику в настраиваемом рабочем процессе (C#).
С учетом SPListItem и SPView/SPQuery кто-нибудь знает, существует ли эффективный * способ узнать, попадает ли элемент в это представление или соответствует запросу?
* эффективное значение, а не просто выполнение запроса, а затем циклический поиск элемента
2 ответа
У меня была идея, однако, если я адаптирую идею, обсуждаемую в ответе на этот вопрос, Как запросить объект SPView.
Если я изменю запрос для выполнения всех фильтров из представления, но также добавлю предложение, в котором ID равен идентификатору моего элемента, я либо получу 1 результат назад, либо 0, тогда я могу просто проверить счетчик.
С точки зрения производительности, я не уверен, что более эффективно между предложением Матье и этой идеей?
Я буду расследовать завтра...
ОБНОВЛЕНИЕ Моя техника была эффективной. Я хотел бы думать (с точки зрения дизайна), что проверка идентификатора, происходящая на стороне БД, а не посредством запроса XML, будет более эффективной.
Спасибо всем за предложение Матье.
Я не сталкивался с таким методом в SPListItem, SPQuery, ... который имеет такую функциональность. Проверка, находится ли текущий элемент в возвращенной коллекции, не кажется такой плохой идеей. Но вместо того, чтобы перебирать все элементы, я бы использовал запрос LINQ, чтобы помочь вам. Что-то вроде этого:
itemCollection.Cast<SPListItem>().Any(i => i.ID.Equals(yourItem.ID));
Где "itemCollection" - это коллекция элементов, полученных из запроса или представления. "yourItem" - это элемент, который вы хотите проверить, находится ли он в коллекции.