Si queremos hacer una consulta de LINQ To SharePoint en la que incluyamos Joins entre listas de diferentes sitios de una misma colección de sitios nos encontraremos conque inicialmente esto no es posible debido a que SPMetal genera las entity clasess relativas a un único sitio, de manera que si una lista de un sitio incluye un lookup a una lista de otro sitio no se generará la correspondiente entidad. En su lugar, SPMetal generará un valor ID para el elemento en la lista relacionada. Esto implica que para poder hacer un Join entre listas de diferentes sitios tendremos que seguir los siguientes pasos:
-
Mover de forma temporal las listas en base a las que vamos a definir las consultas al mismo sitio y generar las Entity Clasess con SPMetal.
-
Usar el método DataContext.RegisterList para indicar al runtime que una de las listas no pertenece al sitio actual.
Un ejemplo de esta idea, es la siguiente:
1: using (ManufacturingSiteDataContext context = new ManufacturingSiteDataContext("http://localhost/sites/manufacturing/construction"))
2: {
3: context.RegisterList<Construction.ProjectsItem>("Projects",
4: "/sites/Manufacturing", "Projects");
5:
6: var results = from projectItem in context.PriorityProjects
7: select new { projectItem.Title,
8: projectItem.ExecutiveSponsor,
9: projectItem.Project.Leader };
10:
11: foreach (var item in results)
12: {
13: output.AppendFormat("Title: {0} Sponsor: {1} Leader: {2}",
14: item.Title, item.ExecutiveSponsor, item.Leader);
15: }
16: }
Fuente: SharePoint Guidance http://msdn.microsoft.com/en-us/library/ff650022.aspx
Comparte este post: