linq to sharepoint

28
LINQ to SharePoint André Vala [email protected]

Upload: andre-vala

Post on 22-Jan-2018

90 views

Category:

Software


0 download

TRANSCRIPT

LINQ to SharePoint

André [email protected]

Agenda

• LINQ?

• LINQ to SharePoint?

• Developing with LINQ

• Common Pitfalls

• Performance

• Conclusion

2

LINQ?

3

LINQ PROVIDER DATA SOURCEAPPLICATION

BC

A

.NET

.NET

QUERY

DATA

Language Integrated Query

LINQ to SQL

using System.Data.Linq;

DataContext db = new DataContext(@”mydatabase.mdf”);

Table<BankAccount> BankAccounts = db.GetTable<BankAccount>();

var query =

from account in BankAccounts

where account.Bank == “Deutsche Bank”

select account;

foreach (BankAccount account in query)

{

Console.WriteLine(“Number: {0}”, account.Number);

} 4

SHAREPOINT

LIST ITEMS

CAML

LINQ to SharePoint?

5

LINQ PROVIDER DATA SOURCEAPPLICATION

BC

A

.NET

.NET

QUERY

DATA

SHAREPOINTLINQ PROVIDER

Microsoft.SharePoint.Linq.dll

LINQ to SharePoint

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

EntityList<BankAccount> BankAccounts =

data.GetList<BankAccount>(“BankAccounts”);

var query =

from account in BankAccounts

where account.Bank == “Deutsche Bank”

select account;

foreach (BankAccount account in query)

{

Console.WriteLine(“Number: {0}”, account.Number);

}

6

DEMO HELLO LINQ!

7

Developing with LINQ

• Entities

• Add Items

• Delete Items

• Recycle Items

• Update Items

• Logging

8

Entities

BankAccount account = new BankAccount()

{

Number = “99100048169”,

Bank = “Deutsche Bank”

};

9

Content Type Entity Class

Column Attribute Member

Entities Manual Definition

[ContentType(Name=“BankAccount”, Id=“0x0104”)]

public partial class BankAccount

{

[Column(Name=“Number”, FieldType=“Text”)]

public string Number { get; set; }

[Column(Name=“Bank”, FieldType=“Text”)]

public string Bank { get; set; }

}

10

Entities Automatic Generation

SPMetalTool to generate entities for a set of content types / lists

Where is it?C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN

How is it used?SPMetal

/web:http://myserver/myweb

/code:BankAccounts.cs

/namespace:MyApp.SharePoint.Data

11

Add Items

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

BankAccount account = new BankAccount()

{

Number = “99100048169”,

Bank = “Deutsche Bank”

};

data.BankAccounts.InsertOnSubmit(account);

data.SubmitChanges();

12

Delete Items

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts)

{

if (account.Bank == “Deutsche Bank”)

data.BankAccounts.DeleteOnSubmit(account);

}

data.SubmitChanges();

13

Recycle Items

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts)

{

if (account.Bank == “Deutsche Bank”)

data.BankAccounts.RecycleOnSubmit(account);

}

data.SubmitChanges();

14

Update Items

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

foreach (BankAccount account in data.BankAccounts)

{

if (account.Bank == “Deutsche Bank”)

account.Bank = “Bank of America”;

}

data.SubmitChanges();

15

Logging

using Microsoft.SharePoint.Linq;

DataContext data = new DataContext(SPContext.Current.Web.Url);

StringWriter writer = new StringWriter();

data.Log = writer;

// LINQ queries

(...)

string caml = writer.ToString();

16

DEMO LINQING

17

Common Pitfalls

• Anonymous Access

• Display Names

18

Pitfall Anonymous Access

• LINQ to SharePoint has no support for anonymous access

• There is a workaround but has disadvantages:

– Large performance impact

– Uses RunWithElevatedPrivileges

• Solution: go back to CAML...

19

DEMO ANONYMOUS ACCESS

20

Pitfall Display Names

• SPMetal uses column Display Names to generate class members

• What happens when the column names have special characters? Weird things happen…

• How can we solve it?

21

DEMO DISPLAY NAMES

22

Performance

• Object Tracking Enabled

• LINQ vs CAML

23

Performance Object Tracking Enabled

Optimizes the performance in read-only scenarios...

DataContext data = new DataContext(SPContext.Current.Web.Url);

data.ObjectTrackingEnabled = false;

24

Performance LINQ vs CAML

• The LINQ to CAML translation is performed in real time

• There is a performance penalty

• The generated query can be inefficient

• Not all the operations offered with LINQ are supported in CAML...

25

DEMO PERFORMANCE

26

Conclusion

LINQ to SharePoint is really simple to use but not the solution when...

• The code must run on the client

• The solution must support anonymous access

• Performance is paramount

• There are lookup columns that refer to lists in other web sites of the same site collection

27

Thank You

André [email protected]