Linq-to-Sharepoint не поддерживает объединения. Список sharepoint не является отдельной таблицей в реальной базе данных, фактическая модель данных sharepoint не имеет значения, но вы должны иметь в виду, что логичная и дешевая операция в обычном SQL не так проста как таковая в CAML, и каждый запрос Linq-to-Sharepoint в конечном итоге преобразуется в CAML.
Во всяком случае, объединения не реализованы. Вы можете использовать Entity столбцов поиска для получения данных, но в фоновом режиме это всегда реализуется как другой запрос, и по моему опыту вы не можете использовать какие-либо агрегатные или другие операции с несколькими записями для этих объектов поиска, включая Count ().
Вероятно, есть хороший способ обойти это, потому что подсчет является такой простой функцией. Я бы попытался преобразовать свойство, которое вы хотите сосчитать, в массив (или аналогичный) и использовать его длину или количество.
В общем, решение этих проблем заключается в том, чтобы обрабатывать данные в вашем коде и полагаться на довольно грубые запросы. И, вложив некоторую осторожность в выбор правильных структур данных, вы сможете очень быстро ускорить операции. В нескольких случаях я испытывал лучшую производительность при обработке кода, чем при использовании решений запросов linq-to-sharepoint, хотя запросы в первом случае приводили к определенному количеству ненужного трафика данных в базу данных.
Еще одна вещь: если вы планируете в конечном итоге создавать списки Sharepoint, используя CAML или код, и вы используете «щелкнувшие» типы / списки содержимого только во время разработки, имейте в виду, что в этих классах SPMetal генерирует различия случаев. В частности, поля поиска представлены не как классы сущностей, а как два обычных поля, с идентификатором элемента и одним с заголовком (больше как в SPListItem). Кроме того, наборы обратного поиска-сущности вообще отсутствуют. Я не видел документации об этом, но я испытал это. Следовательно, вам может понадобиться переосмыслить некоторые из ваших запросов, если вы планируете использовать сайт, созданный на CAML. Может быть обходной путь, но по моему опыту Lookup Entity (наборы) в любом случае очень медленный, и лучше использовать обычный запрос linq.
Надеюсь, это поможет.