SharePoint 2010 – LINQ and SPMetal

In this article we can explore some of the 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 Language. 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 we need LINQ?

You might have noted that the previous List Programming examples did not used 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 the 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. The SPMetal.exe is the tool which helps in generating the Model classes.

Although we can create the 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:

1. Manager List Creation

2. Entity Creation

3. Read using LINQ

4. Insert Entity

5. Update Entity

6. Delete Entity

Experimenting with LINQ and SPMetal

To start with create a custom list inheriting from Custom List and name it as Manager. Add the following custom columns and data:

clip_image002

Generating the Entity Models

Now we can generate the Entity Model for the above List.

You can get the SPMetal.exe inside the following folder:

C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14BIN

Open a command prompt and go to the specified folder:

clip_image004

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.

clip_image006

Create Application

Create a new SharePoint > 2010 > Console Application (targeting .Net 3.5 framework) and add the SiteEntities.cs file into it.

clip_image008

Add reference to the following assembly:

clip_image010

You can try with 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.

clip_image012

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:

clip_image014

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:

clip_image016

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:

clip_image018

This concludes our Read, Insert, Update, Delete operations using LINQ to SharePoint. Hope the topics are understood by the reader.

References

http://msdn.microsoft.com/en-us/library/ee535491.aspx

http://msdn.microsoft.com/en-us/library/ee538255.aspx

Summary

In this article we have explored LINQ and SPMetal tool. This information is necessary in the real world programming scenarios. The attachment contains the source code we discussed.

2 thoughts on “SharePoint 2010 – LINQ and SPMetal

  1. ashok says:

    when i executing spmetal command getting following error Error:Feature ’33a75c5d-110a-41b6-805d-0c360e1ce2e7′ for list template’10001′ is not installed in this farm

    1. Jean Paul says:

      Hello Ashok,

      It looks like your custom template 10001 is not accessible by SPMetal.
      If this is executed in a different server, you can try /useremoteapi argument.

      http://msdn.microsoft.com/en-us/library/ee538255.aspx

      Regards,
      Jean Paul

Leave a Reply

Your email address will not be published. Required fields are marked *