Sharepoint - LINQ против Direct SPQuery - PullRequest
1 голос
/ 25 июля 2011

Я пытаюсь найти оптимизированный метод для работы с LINQ-запросами против вызова SPQuery для оператора select. Рассматриваемый случай: у меня есть библиотека документов, которая должна закрыть более 5000 документов (расположенных в папках), и у меня есть глобальный кэш всех деталей документа для выбранных метаданных, которые запрашиваются и кэшируются как пользовательский объект «Документ». Наши бизнес-пользователи обычно обновляют библиотеку документов с достаточной частотой, и для очистки и воссоздания этого кэша доступен код.

Теперь я пишу новый пользовательский интерфейс, который будет выбирать и извлекать все документы, которые соответствуют определенному «ключевому слову» (метаданным). У меня есть два варианта 1) Выполнить CAML-запрос к библиотеке документов, который извлечет мне результаты в виде SPListItem, который мне нужно преобразовать в сущности «Документ» (около 8 открытых строк метаданных)

OR

2) Запросите этот большой кэш библиотеки документов с помощью LINQ и извлеките получившиеся объекты «Document».

Любые технические пояснения о том, что лучше и почему с точки зрения SharePoint, очень помогли бы.

Plesae, не стесняйтесь задавать вопросы по моему делу для получения дополнительной информации

спасибо заранее Приветствия

Ответы [ 2 ]

1 голос
/ 25 июля 2011

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

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

Я реализовал аналогичную функциональность в классе репозитория, который я написал для доступа к данным SharePoint.

ICollection<Document> list = 
            web.Lists[documentLibraryName].GetItems(query).Cast<SPListItem>().Select(
                doc => new Document(
                    doc["Title"].ToString(),
                    doc["Size KB"].ToString())).ToList();

Вышеприведенный текст немного отличается от моего кода, но в нем описан изящный способ преобразования в ваши объекты Document после выполнения запроса.

0 голосов
/ 22 июля 2012

Я думаю, вы также можете использовать PortalSiteMapProvider, если хотите использовать кеш для повышения производительности.

Метод PortalSiteMapProvider.GetCachedListItemsByQuery можно использовать для запроса списка, а также для кэширования результатов запроса.Однако вам следует избегать его использования, если ваш запрос возвращает разные наборы данных в каждый момент времени.Для более подробной информации проверьте это:

http://extreme -sharepoint.com / 2012/07/17 / data-access-via-caml-questions /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...