Verwenden von LINQ to SharePoint

Letzte Änderung: Donnerstag, 6. Mai 2010

Gilt für: SharePoint Foundation 2010

Dieser Artikel enthält eine Übersicht über den LINQ to SharePoint-Anbieter, mit dem Sie LINQ-Abfragen (Language Integrated Query in Microsoft SharePoint Foundation-Lösungen verwenden können. Durch den Anbieter wird außerdem das Ändern von Daten mithilfe von optimistischer Parallelität ermöglicht. Die Nachverfolgung von Objektänderungen und die Auflösung von Konflikten werden von LINQ to SharePoint ebenfalls unterstützt.

LINQ- und LINQ-Anbieter

LINQ ist ein Feature der Programmiersprachen C# und Microsoft Visual Basic .NET. Compiler sind in Visual Studio enthalten.

Durch LINQ werden die beiden Sprachen durch eine SQL-ähnliche Syntax und ein entsprechendes Vokabular ergänzt, die zum Abfragen von Datenquellen verwendet werden können. Im Gegensatz zu anderen Sprachen und Abfragesyntaxen jedoch, die sich je nach Typ der Datenquelle unterscheiden, kann LINQ im Prinzip zum Abfragen beliebiger Datenquellen verwendet werden. Aus diesem Grund kommen Entwickler möglicherweise zu dem Schluss, dass dies die einzige Abfragesyntax ist, die sie kennen müssen.

Damit auf LINQ auf eine Datenquelle zugegriffen werden kann, muss lediglich ein LINQ-Anbieter für die Datenquelle erstellt werden. Ein LINQ-Anbieter ist eine Implementierung der Schnittstellen System.Linq.IQueryable<T> und System.Linq.IQueryProvider, die in Microsoft .NET Framework (System.Core.dll) enthalten sind. Die implementierenden Klassen müssen öffentlich sein und sich in einer verwalteten Codeassembly befinden. Die Hauptaufgabe der Klasse, von der IQueryProvider implementiert wird, besteht darin, LINQ-Abfragen in die Sprache der Datenquelle (beispielsweise SQL oder XQuery) zu übersetzen und anschließend die Anwendung der Datenquelle aufzurufen, um die Abfrage auszuführen.

Durch den Anbieter muss außerdem eine Gatewayklasse verfügbar gemacht werden, deren Instanzen mit der Datenquelle kommunizieren und IEnumerable<T>-Objekte ausgeben können. Die Gatewayklasse für LINQ to SQL beispielsweise ist DataContext, und die Gatewayklasse für LINQ to XML ist XDocument. Die Gatewayklasse muss System.Linq.IQueryable<T> implementieren oder über eine untergeordnete Eigenschaft verfügen, durch die dies geschieht, oder über eine Methode verfügen, von der ein Typ zurückgegeben wird, durch den System.Linq.IQueryable<T> implementiert wird. DataContext beispielsweise hat eine GetTable()-Methode, von der ein Table<TEntity>-Typ zurückgegeben wird, durch den System.Linq.IQueryable<T> implementiert wird. Diese Schnittstelle wiederum hat eine Eigenschaft vom Typ IQueryProvider. (Von der Gatewayklasse kann auch direkt IQueryProvider implementiert werden.) Abgefragt werden Objekte des Table<TEntity>-Typs.

In vielen Fällen kann ein LINQ-Anbieter von einem .NET-Lösungsentwickler nur verwendet werden, wenn der Entwickler einen Satz von Entitätsklassen erstellt, die die untergeordneten Entitäten in der Datenquelle darstellen, beispielsweise bestimmte Tabellen einer bestimmten SQL-Datenbank. Da häufig viele dieser Klassen erstellt werden müssen (beispielsweise eine Datenbank mit drei Dutzend Tabellen), schließt der Entwickler eines LINQ-Anbieters normalerweise ein Codegenerierungstool ein, um den Erstellungsprozess für diese Entitätsklassen zu automatisieren.

Informationen zu LINQ

Entwickler, die mit dem SharePoint to LINQ-Anbieter arbeiten möchten, sollten sich allgemein über LINQ und die Verwendung von LINQ mit dem LINQ to SQL-Anbieter sowie über den in .NET Framework enthaltenen speziellen LINQ to Objects-Anbieter informieren.

Im Microsoft Developer Network (MSDN) finden Sie zahlreiche Informationen, einschließlich Videos, zu LINQ und zu den in .NET Framework integrierten Anbietern. Außerdem gibt es viele Bücher zu diesem Thema.

Der LINQ to SharePoint-Anbieter

Der LINQ to SharePoint-Anbieter wird im Microsoft.SharePoint.Linq-Namespace definiert. Mit diesem Anbieter werden LINQ-Abfragen in Collaborative Application Markup Language (CAML)-Abfragen übersetzt. Entwickler müssen nicht wissen, wie CAML-Abfragen geschrieben werden. LINQ-Abfragen können in Servercode verwendet werden. Zum Ausführen von Abfragen aus einer Clientanwendung verwenden Sie die Unterstützung für ADO.NET Data Services in SharePoint.

Die Gatewayklasse für den LINQ to SharePoint-Anbieter ist die Microsoft.SharePoint.Linq.DataContext-Klasse, die die Daten einer SharePoint Foundation-Website darstellt. Die Verwendung und Funktionsweise entspricht der System.Data.Linq.DataContext-Klasse im LINQ to SQL-Anbieter. Genau wie diese Klasse über eine GetTable()-Methode verfügt, mit der ein Table<TEntity>-Objekt zurückgegeben wird, von dem System.Linq.IQueryable<T> implementiert wird, verfügt die Microsoft.SharePoint.Linq.DataContext-Klasse über eine GetList<T>-Methode, mit der eine EntityList<TEntity>-Klasse zurückgegeben wird, von der System.Linq.IQueryable<T> implementiert wird. Abgefragt werden Objekte des EntityList<TEntity>-Typs.

Im folgenden Beispiel wird LINQ verwendet, um SharePoint Foundation abzufragen.

// 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);
}

Weitere Informationen zum Ausführen von Abfragen mit LINQ to SharePoint finden Sie unter Gewusst wie: Ausführen von Abfragen mithilfe von LINQ to SharePoint.

Im folgenden Beispiel wird LINQ verwendet, um einer SharePoint FoundationListe ein Element hinzuzufügen.

// 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();

Weitere Informationen zum Hinzufügen, Bearbeiten und Löschen von Listenelementen mit LINQ to SharePoint finden Sie unter Gewusst wie: Schreiben in Inhaltsdatenbanken mithilfe von LINQ to SharePoint.

Siehe auch

Referenz

Microsoft.SharePoint.Linq.DataContext

EntityList<TEntity>

GetList<T>

IEnumerable<T>

System.Linq.IQueryable<T>

IQueryProvider

Microsoft.SharePoint.Linq

Weitere Ressourcen

LINQ to Objects

LINQ to SQL: .NET Language Integrated Query für relationale Daten

LINQ to XML