LinqToSharePoint SandBoxed Solution Shakir Majeed Khan

Post on 19-Dec-2015

215 views 1 download

Transcript of LinqToSharePoint SandBoxed Solution Shakir Majeed Khan

LinqToSharePointSandBoxed Solution

Shakir Majeed Khanhttp://sharepointtechies.wordpress.com/

MySelf

User Group Leader of SharePoint Techies, Working independently on SharePoint technologies. Trainer for  Microsoft Office SharePoint Server 2007 and  Window SharePoint Services 3.0 at AUC Technologies. 

http://junooni.wordpress.com/ shakir.majeed@gmail.com www.facebook.com/shakir.majeed

Agendasession is divided into two

LinqtoSharePointSandBoxed Solution

Questions

What’s wrong with this

SqlConnection c = new SqlConnection(…);c.Open();SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone FROM Customers c WHERE c.City = @p0");cmd.Parameters.AddWithValue("@p0", "London“);DataReader dr = c.Execute(cmd);while (dr.Read()) { string name = dr.GetString(0); string phone = dr.GetString(1); DateTime date = dr.GetDateTime(2);}dr.Close();

Queries in quotes

Loosely bound arguments

Loosely typed result sets

No compile time checks

What’s wrong with this

LINQ (pronounced Link):Language INtegrated Query

What is LINQ?

Language Integrated QuerySimplified, object-oriented way to queryBridges OOP and relational dataCompile-time checked queriesProvides IntelliSense inside Visual StudioUnified syntax for querying any data source

Linq to SQL

public class Customer { … }

public class Northwind : DataContext{ public Table<Customer> Customers; …}

Northwind db = new Northwind(…);var contacts = from c in db.Customers where c.City == "London" select new { c.Name, c.Phone };

Classes describe data

Strongly typed connections

Integrated query syntax

Strongly typed results

Tables are like collections

CAML(Collaborative Application MarkUp Language)SPWeb web;SPQueryquery = newSPQuery();query.Query= String.Format(“<Where> <And>  <Eq>        <FieldRef Name='LastName' />     <Value Type='Text'>Shakir</Value>   </Eq>     <Geq>        <FieldRef Name='Age' />    <Value Type='Number'>16</Value>  </Geq>  </And></Where>”)SPListItemCollectionl Coll= web.Lists[“Employee”].GetItems(query);

Queries in quotes

Loosely bound arguments

No compile time checks

Demo

C# Enhancments for LINQ

IEnumerable<T>, IQueryable<T>Automatic PropertiesObject and Collection InitializersLambda ExpressionsQuery SyntaxAnonymous Types

IEnumerable<T>, IQueryable<T>

Contained in System.Collections.GenericImplemented by the query providerSupports a simple iteration or a query against that typeThis is what allows LINQ to query

Automatic Properties

Allows short-hand property declarationsCompiler emits getters and settersUsed in LINQ to surface properties

public class Contact { public string FirstName { get; set; }  public string LastName  { get; set; }        }

Object and Collection Initializers//Traditional approach

Contact c= new Contact();c.FirstName = “shakir";c.LastName = “majeed ";

//Object InitializerContact c= new Contact{ FirstName=“shakir", LastName=“Majeed

" };

//Collection InitializerList<Contact> contacts = new List<Contact>{ Contact c= new Contact{ FirstName=“shakir", LastName=“majeed"}, Contact c= new Contact{ FirstName=“aamir", LastName=“majeed" }, Contact c= new Contact{ FirstName=“zakir", LastName=“majeed" }, };

Lambda Expressions

Compact way to write anonymous functions

// passing parameter using an anonymous delegateIEnumerable<Contact> results = contacts.Where( delegate(Contact c) {return c.FirstName==“shakir”;} );

// equivalent code using a lambda expressionIEnumerable<Contact> results = contacts.Where( c => FirstName=="shakir" );

Query Syntax

Offers a readable alternative to Method syntax

IEnumerable<Contact> results = contacts.Where( c=> FirstName=="shakir");

IEnumerable<Contact> results = from c in contacts where c.FirstName.Equals("shakir");

Anonymous Types

Allows developers to use variables without declaring the type.Still strongly typed, but inferred

var results = from c in contacts where c.FirstName.Equals("Mike");

Demo

Thank You

Facebook: http://www.facebook.com/shakir.majeedBlog: http://junooni.wordpress.com/Email: shakir.majeed@gmail.com