Partager via


Utilisation de LINQ to SharePoint

Dernière modification : jeudi 6 mai 2010

S’applique à : SharePoint Foundation 2010

Cet article présente une vue d’ensemble du fournisseur LINQ to SharePoint, qui vous permet d’utiliser des requêtes LINQ (Language Integrated Query) dans vos solutions Microsoft SharePoint Foundation. Le fournisseur permet aussi la modification des données selon un accès concurrentiel optimiste. Le suivi des modifications des objets et la résolution des conflits sont également pris en charge par LINQ to SharePoint.

LINQ et fournisseurs LINQ

LINQ est une fonctionnalité des langages de programmation C# et Microsoft Visual Basic .NET. Des compilateurs sont inclus avec Visual Studio.

LINQ ajoute une syntaxe et un vocabulaire semblables à SQL à chacun de ces langages, qui peuvent être utilisés pour effectuer des requêtes sur des sources de données. Cependant, contrairement à d’autres langages et à d’autres syntaxes de requête qui s’appliquent à l’un ou l’autre type de source de données spécifique, LINQ peut en principe être utilisé pour effectuer des requêtes sur n’importe quelle source de données. Pour cette raison, les développeurs peuvent penser qu’il s’agit de la seule syntaxe de requête qu’il leur est désormais nécessaire de connaître.

Tout ce qu’il faut faire pour rendre une source de données accessible à LINQ est de demander à quelqu’un de créer un fournisseur LINQ pour la source de données. Un fournisseur LINQ est une implémentation des interfaces System.Linq.IQueryable<T> et System.Linq.IQueryProvider qui sont incluses avec Microsoft .NET Framework (System.Core.dll). Les classes d’implémentation doivent être publiques dans un assembly de code managé. La tâche principale de la classe qui implémente IQueryProvider est de traduire les requêtes LINQ dans le langage de la source de données, tel que SQL ou XQuery, puis d’appeler l’application de la source de données pour exécuter la requête.

Le fournisseur doit aussi exposer une classe passerelle dont les instances peuvent communiquer avec la source de données et les objets IEnumerable<T> en sortie. Par exemple, la classe passerelle pour LINQ to SQL (éventuellement en anglais) est DataContext et la classe passerelle pour LINQ to XML est XDocument. La classe passerelle doit implémenter System.Linq.IQueryable<T> ou avoir une propriété enfant qui le fait, ou encore avoir une méthode qui retourne un type implémentant System.Linq.IQueryable<T>. Par exemple, DataContext a une méthode GetTable() qui retourne un type Table<TEntity> qui implémente System.Linq.IQueryable<T>. Cette dernière interface a à son tour une propriété de type IQueryProvider. (La classe passerelle peut aussi directement implémenter IQueryProvider.) Ce sont des objets de type Table<TEntity> qui font l’objet de requêtes.

Dans la plupart des cas, un fournisseur LINQ ne peut pas être utilisé par un développeur de solutions .NET à moins qu’il crée un ensemble de classes d’entités pour représenter les entités subordonnées de la source de données, telles que les tables spécifiques d’une base de données SQL spécifique. Il arrive fréquemment qu’un grand nombre de ces classes doivent être créées (par exemple dans le cas d’une base de données avec une trentaine de tables) ; le développeur d’un fournisseur LINQ inclura donc généralement un outil de génération de code pour automatiser le processus de création de ces classes d’entités.

Apprentissage de LINQ

Avant d’utiliser le fournisseur SharePoint to LINQ, les développeurs doivent apprendre les concepts généraux de LINQ et découvrir comment il est utilisé avec le fournisseur LINQ to SQL et le fournisseur spécial LINQ to Objects qui sont inclus avec .NET Framework.

MSDN (Microsoft Developer Network) contient un grand nombre d’informations, y compris des vidéos, à propos de LINQ et des fournisseurs intégrés dans .NET Framework. Il existe également de nombreux ouvrages sur ce sujet.

Le fournisseur LINQ to SharePoint

Le fournisseur LINQ to SharePoint est défini dans l’espace de noms Microsoft.SharePoint.Linq. Il traduit les requêtes LINQ en requêtes Langage CAML (Collaborative Application Markup Language). Il n’est plus nécessaire pour les développeurs de savoir comment écrire des requêtes CAML. Les requêtes LINQ peuvent être utilisées dans le code serveur. Pour effectuer une requête depuis une application cliente, utilisez la prise en charge de SharePoint pour ADO.NET Data Services.

La classe passerelle pour le fournisseur LINQ to SharePoint est Microsoft.SharePoint.Linq.DataContext, qui représente les données d’un site Web SharePoint Foundation. Elle est similaire en terme d’utilisation et de fonctions à la classe System.Data.Linq.DataContext du fournisseur LINQ to SQL. Tout comme cette dernière classe a une méthode GetTable() qui retourne un objet Table<TEntity> implémentant System.Linq.IQueryable<T>, la classe Microsoft.SharePoint.Linq.DataContext a quant à elle une méthode GetList<T> qui retourne une classe EntityList<TEntity> implémentant System.Linq.IQueryable<T>. Ce sont des objets de type EntityList<TEntity> qui font l’objet de requêtes.

Voici un exemple d’utilisation de LINQ pour effectuer des requêtes sur 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);
}

Pour plus d’informations sur les requêtes avec LINQ to SharePoint, voir Procédure : effectuer des requêtes à l’aide de LINQ to SharePoint.

Voici un exemple d’utilisation de LINQ pour ajouter un élément à une liste 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();

Pour plus d’informations sur l’ajout, la modification et la suppression d’éléments de liste avec LINQ to SharePoint, voir Procédure : écrire dans les bases de données de contenus en utilisant LINQ to SharePoint.

Voir aussi

Référence

Microsoft.SharePoint.Linq.DataContext

EntityList<TEntity>

GetList<T>

IEnumerable<T>

System.Linq.IQueryable<T>

IQueryProvider

Microsoft.SharePoint.Linq

Autres ressources

LINQ to Objects

LINQ to SQL : Requête intégrée au langage dans .NET pour les données relationnelles (éventuellement en anglais)

LINQ to XML