LinQ to SharePoint

LinQ define operadores de consulta estándar que permiten a lenguajes habilitados con LinQ filtrar, enumerar y crear proyecciones de varios tipos de colecciones usando la misma sintaxis. Tales colecciones pueden incluir arreglos (vectores), clases enumerables, XML, conjuntos de datos desde bases de datos relacionales y orígenes de datos de terceros.

Extraído de Wikipedia

Una de las gracias de LinQ es que un tercero podría crear su propia biblioteca para un origen de datos cualquiera. En el caso de SharePoint, Bart Desmet creo una implementación de LinQ para simplificar el acceso a datos de una lista SharePoint 2007 evitando las complejidades que presenta el generar un query con CAML.

Fue tal el éxito de dicha biblioteca que ahora el SDK de SharePoint 2010 lo incluye, proporcionando además una herramienta equivalente al SQLMetal llamada SPMetal la cual es la responsable de crear todas las clases necesarias para utilizar esta implementación de LinQ.

Para este artículo utilizaremos una lista SharePoint 2010 personalizada llamada “Libros”, cuya estructura es la siguiente:

blg1

Primero en Visual Studio 2010 crearé una aplicación de consola llamada “Ejemplo LinqToSharePoint”, luego agregaremos unas referencias a los siguientes assemblies:

  • Microsoft.SharePoint
  • Microsoft.SharePoint.Linq

Luego agregamos las siguientes instrucciones using:

 using System.Linq;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Linq;

Una vez hecho esto abrimos una ventana de símbolo de sistema y navegamos al directorio 14 de nuestro SharePoint 2010, el cual generalmente se encuentra en: “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN”. Luego ejecutamos lo siguiente:

SPMETAL.EXE /web:https://PC:2011 /code:MiSitio.cs /namespace:Ejemplo

En donde cada parámetro es para lo siguiente:

-
web: URL del sitio sobre el cual generaré las clases LinQ

-
code: El nombre del archivo de resultado. Si el archivo tiene extensión CS genera una clase C#, si tiene extensión VB genera una clase Visual Basic

-
namespace: El namespace al cual pertenecerá esta clase

Una vez ejecutada esta instrucción obtendremos como resultado la siguiente clase, la cual será agregada a nuestro aplicación de consola:

blg2

Regresando a nuestra aplicación de consola escribiremos lo siguiente:

 
//Creo un contexto a nuestro sitio, esto utiliza las clases generadas por SPMEtal  
Ejemplo.MiSitioDataContext ctx = new Ejemplo.MiSitioDataContext("https://PC:2011/"); 
 
var data = from i in ctx.Libros  
           orderby i.Título  
           select new  {  ID = i.Identificador.Value,  Titulo = i.Título  };  

ctx.Log = Console.Out; 

//Con esto podemos ver el CAML generado por LinQ  
foreach (var d in data)  
{  
    Console.WriteLine("\n{0} - {1}", d.ID, d.Titulo);  
}  

Obteniendo el siguiente resultado:

blg3

Espero que esta información haya sido de su utilidad, pueden descargar el código fuente de este artículo aquí.