Как работает Queryable Load в SharePoint?

Может ли кто-нибудь помочь мне понять, какая работа происходит за кулисами, когда LINQ используется для извлечения объектов SharePoint. Для примера я могу использовать такой код:

private IEnumerable<List> newLists;

var dt = new DateTime(2010, 3, 20);
var query = from list
            in clientContext.Web.Lists
            where list.Created > dt && list.Hidden == false
            select list;

newLists = clientContext.LoadQuery(query);
clientContext.ExecuteQuery();

Как это работает?

Как выглядит запрос?

Из документации я нашел:

При использовании CSOM вы можете писать запросы LINQ к объектам на стороне клиента, таким как списки и веб-сайты, а затем использовать класс ClientContext для отправки этих запросов на сервер. Важно понимать, что при таком подходе вы используете LINQ to Objects для запроса объектов SharePoint, а не LINQ to SharePoint. Это означает, что ваши выражения LINQ не преобразуются в CAML, и вы не увидите повышения производительности, связанного с преобразованием CAML.

Итак, я был немного смущен, потому что думал, что выражение LINQ преобразуется в запрос Caml. Я не могу понять, как это работает. Как я могу посмотреть детали запроса при выполнении метода ExecuteQuery()? Не могли бы вы порекомендовать мне какие-либо инструменты для просмотра запросов?


person Warlock    schedule 02.12.2012    source источник


Ответы (1)


SP использует CAML внутри: среда выполнения SP преобразует Linq в CAML и отправляет его через запрос Soap или оператор REST (если вы используете службы RESTful): http://msdn.microsoft.com/en-us/library/ff798339.aspx (с примерами);

Подробнее см. здесь: http://msdn.microsoft.com/en-us/library/ff798464.aspx

и это может быть полезно: http://nikspatel.wordpress.com/2012/08/05/sharepoint-2010-data-querying-options-server-om-vs-client-om-vs-rest-vs-linq-vs-search-api/

person SalientBrain    schedule 02.12.2012
comment
Спасибо за ответ и действительно полезные ссылки! Но, как я узнал из документации MSDN, выражения LINQ не преобразуются в CAML :( Я обновил свой вопрос этой заметкой, пожалуйста, просмотрите. Любые идеи будут оценены. - person Warlock; 02.12.2012
comment
Linq to SharePoint преобразует Linq в CAML (+ создается специальный класс DataContext), но CSOM использует сериализацию/десериализацию Linq (дерево выражений) через http (например, сервисы Ria, например linq через wcf) и реальное выполнение запроса, выполняемое на сервере - person SalientBrain; 02.12.2012
comment
Gr8, спасибо! Это то, что я искал. И не могли бы вы порекомендовать мне какие-либо инструменты для просмотра запросов? Я хочу видеть запрос и ответ, когда я вызываю метод ExecuteQuery(). - person Warlock; 02.12.2012