Introduction
In this article we explore some advanced programming areas:
- LINQ to SharePoint
- SPMetal
LINQ to SharePoint is a new feature of SharePoint 2010. LINQ stands for Language Integrated Query which is a part of .NET. The aim of LINQ is to
support different data sources using the same Typed Query Syntax. Presently it supports Objects, Datasets, SQL, Entities, XML, etc.
Why do we need LINQ?
You might have noted that the previous List Programming examples did not use proper
column name access. LINQ allows us to access the List in a Typed manner. Adding more clarity we can access the list items based
on the column names which we usually do with databases.
Example:
var result = from c in Citizen where c.Name == "John" select c;
What is SPMetal?
As we will be creating custom lists having custom column names, we need to
generate the Entity Model. SPMetal.exe is the tool which helps in generating Model classes. Although we can create Model classes manually, it will be a tedious job and error prone. Using SPMetal would be the right approach to model classes.
Activities
Following are the activities performed in this article:
- Manager List Creation
- Entity Creation
- Read using LINQ
- Insert Entity
- Update Entity
- Delete Entity
Experimenting with LINQ and SPMetal
To start with, create a custom list inheriting from Custom List and name it
Manager
. Add the following custom columns and data:
Generating the Entity Models
Now we can generate the Entity Model for the above List. You can get SPMetal.exe inside the following folder: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN.
Open a
command prompt and go to the specified folder:
Now run the
following command:
SPMetal.exe /web:http://YOURSITE /code:SiteEntities.cs
Wait for a
while and you will be ready with the new file. Open the file SiteEntities and
you can see the Manager class is contained inside.
Create Application
Create a new
SharePoint > 2010 > Console Application (targeting the .NET 3.5 framework)
and add the SiteEntities.cs file into it.
Add
a reference to the following assembly:
You can try
the following operations: Read, Insert, Update, Delete using LINQ to
SharePoint.
Selecting
an Item
Now we are
trying to select the managers with country as USA:
using (SiteEntitiesDataContext context = new SiteEntitiesDataContext("http://appes-pc"))
{
var result = context.Manager.Where(m => m.Country == "USA");
foreach (ManagerItem manager in result)
{
Console.WriteLine(manager.Name);
}
}
Note: You can use LINQ or Lambda Expression to do the query. In the above example I have used Lambda.
On executing
the application you can see the following results.
Inserting
an Item
For
inserting a new item into the Manager list, use the following code:
using (SiteEntitiesDataContext context = new SiteEntitiesDataContext("http://appes-pc"))
{
ManagerItem manager = new ManagerItem();
manager.Name = "New Manager";
manager.Address = "New Address";
manager.Country = "New Country";
context.Manager.InsertOnSubmit(manager);
context.SubmitChanges();
}
After executing the application, open the Manager list inside SharePoint as shown below:
Updating an Item
For updating an item inside SharePoint, use the following code:
using (SiteEntitiesDataContext context = new SiteEntitiesDataContext("http://appes-pc"))
{
ManagerItem manager = context.Manager.Where(m =>
string.IsNullOrEmpty(m.Title)).FirstOrDefault();
if (manager != null)
manager.Title = "New Title";
context.SubmitChanges();
}
You can see
the updated entity inside SharePoint:
Deleting an Item
For deleting an item inside SharePoint use the following code:
using (SiteEntitiesDataContext context = new SiteEntitiesDataContext("http://appes-pc"))
{
ManagerItem manager = context.Manager.Where(m => m.Title.Length > 3).FirstOrDefault();
if (manager != null)
context.Manager.DeleteOnSubmit(manager);
context.SubmitChanges();
}
You can see that the
item is deleted inside SharePoint:
This concludes our
Read, Insert, Update, Delete operations using LINQ to SharePoint. Hope the
topics are understood by the reader.
Summary
In this article we have explored LINQ and the SPMetal tool. This information is necessary in real world programming scenarios. The attachment contains the source code we discussed.
References