Uso de LINQ to SharePoint

Última modificación: jueves, 06 de mayo de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo se proporciona información general acerca del proveedor LINQ to SharePoint, que permite usar consultas Language Integrated Query (LINQ) en las soluciones de Microsoft SharePoint Foundation. El proveedor también permite el cambio de datos mediante simultaneidad optimista. LINQ to SharePoint también admite el seguimiento de los cambios en el objeto y la resolución de conflictos.

LINQ y proveedores LINQ

LINQ es una característica de los lenguajes de programación C# y Microsoft Visual Basic .NET. Los compiladores se incluyen con Visual Studio.

LINQ agrega vocabulario y una sintaxis similar a SQL para cada lenguaje, que pueden usarse para consultar orígenes de datos. Pero a diferencia de otros lenguajes y sintaxis de consulta que varían de un tipo de origen de datos a otro, LINQ puede usarse para consultar, en principio, cualquier origen de datos. Por esta razón, es posible que los programadores descubran que esta es la única sintaxis de consulta que necesitan conocer.

Lo único que se necesita para que un origen de datos sea accesible con LINQ es la creación de un proveedor LINQ para el origen de datos. Un proveedor LINQ es una implementación de las interfaces System.Linq.IQueryable<T> y System.Linq.IQueryProvider que se incluyen con Microsoft .NET Framework (System.Core.dll). Las clases de implementación debe ser públicas en un ensamblado de código administrado. La tarea principal de la clase que implementa IQueryProvider consiste en traducir consultas LINQ al lenguaje del origen de datos, como SQL o XQuery y, posteriormente, llamar a la aplicación del origen de datos para ejecutar la consulta.

El proveedor también debe exponer una clase de puerta de enlace cuyas instancias puedan comunicarse con el origen de datos y los objetos IEnumerable<T> de salida. Por ejemplo, la clase de puerta de enlace para LINQ to SQL es DataContext y la clase de puerta de enlace para LINQ to XML es XDocument. La clase de puerta de enlace debe implementar System.Linq.IQueryable<T> o tener una propiedad secundaria que lo haga, o bien tener un método que devuelva un tipo que implemente System.Linq.IQueryable<T>. Por ejemplo, DataContext tiene un método GetTable() que devuelve un tipo Table<TEntity> que implementa System.Linq.IQueryable<T>. La última interfaz, a su vez, tiene una propiedad de tipo IQueryProvider. (La clase de puerta de enlace también puede implementar IQueryProvider directamente). Se consultan objetos de tipo Table<TEntity>.

En muchos casos, un programador de soluciones .NET no puede usar un proveedor LINQ a menos que el programador cree un conjunto de clases de entidad para representar las entidades subordinadas del origen de datos, como las tablas particulares de una base de datos de SQL concreta. Frecuentemente, deben crearse muchas de estas clases (por ejemplo, una base de datos con tres docenas de tablas), por lo que el programador de un proveedor LINQ normalmente incluirá una herramienta de generación de código para automatizar el proceso de creación de estas clases de entidad.

Información sobre LINQ

Antes de trabajar con el proveedor LINQ to SharePoint, los programadores deben obtener información acerca de LINQ en general y sobre el modo en que se usa con el proveedor LINQ to SQL y el proveedor LINQ to Objects especial, incluidos con .NET Framework.

Microsoft Developer Network (MSDN) cuenta con una gran cantidad de información, incluidos algunos vídeos, acerca de LINQ y los proveedores creados en .NET Framework. También hay disponibles varios libros sobre el tema.

Proveedor LINQ to SharePoint

El proveedor LINQ to SharePoint se define en el espacio de nombres Microsoft.SharePoint.Linq. Este proveedor traduce consultas LINQ en consultas Lenguaje de marcado de la aplicación de colaboración (CAML). Los programadores ya no necesitan saber cómo escribir consultas CAML. Las consultas LINQ pueden usarse en código de servidor. Para consultar desde una aplicación cliente, use Admisión de los servicios de datos de ADO.NET en SharePoint.

La clase de puerta de enlace del proveedor LINQ to SharePoint es Microsoft.SharePoint.Linq.DataContext, que representa los datos de un sitio web de SharePoint Foundation. Es paralela en cuanto a uso y función a la clase System.Data.Linq.DataContext del proveedor LINQ to SQL. Del mismo modo en que la última clase tiene un método GetTable() que devuelve un objeto Table<TEntity> que implementa System.Linq.IQueryable<T>, la clase Microsoft.SharePoint.Linq.DataContext también tiene un método GetList<T> que devuelve una clase EntityList<TEntity> que implementa System.Linq.IQueryable<T>. Se consultan objetos de tipo EntityList<TEntity>.

El siguiente es un ejemplo del uso de LINQ para consultar SharePoint Foundation.

// Get DataContext from page context
DataContext data = new DataContext(SPContext.Current.Web.Url);

// Get the SharePoint list
EntityList<Customer> Customers = data.GetList<Customer>("Customers");

// Query for customers from London
var londonCustomers = from customer in Customers
                      where customer.City == "London"
                      select customer;

foreach (var londonCust in londonCustomers)
{
    Console.Writeline("id = {0}, City = {1}", 
                      londonCust.CustomerId, 
                      londonCust.City);
}

Para obtener más información acerca de las consultas mediante LINQ to SharePoint, vea el tema Procedimiento para consultar mediante LINQ to SharePoint.

El siguiente es un ejemplo del uso de LINQ para agregar un elemento a una lista de SharePoint Foundation.

// Get DataContext from page context
DataContext data = new DataContext(SPContext.Current.Web.Url);

// Get the SharePoint list
EntityList<Customer> Customers = data.GetList<Customer>("Customers");

// Create the item to be added
Customer newCustomer = new Customer() { CustomerId=36, City=”Madrid” };

// Mark the item to be added on the next call of Submit
Customers.InsertOnSubmit(newCustomer);

// Submit all changes
data.SubmitChanges();

Para obtener información acerca de la adición, edición y eliminación de elementos de lista mediante LINQ to SharePoint, vea el tema Procedimiento para escribir en bases de datos de contenido mediante LINQ to SharePoint.

Vea también

Referencia

Microsoft.SharePoint.Linq.DataContext

EntityList<TEntity>

GetList<T>

IEnumerable<T>

System.Linq.IQueryable<T>

IQueryProvider

Microsoft.SharePoint.Linq

Otros recursos

LINQ to Objects

LINQ to SQL: Language Integrated Query de .NET para datos relacionales

LINQ to XML