SlideShare uma empresa Scribd logo
1 de 51
UNDERSTANDING LINQ
INDEX
 Introduction to LINQ
 Why LINQ?

 Language features supporting the LINQ project

 Getting started with standard query operators

 LINQ to Objects

 Beyond basic in-memory queries

 Getting started with LINQ to SQL

 Peeking under the covers of LINQ to SQL

 Introducing LINQ to XML
INTRODUCTION TO LINQ

   Linq is short for Language Integrated Query.

   We use the term language-integrated query to indicate
    that query is an integrated feature of the developer's
    primary programming languages (for example, Visual C#,
    Visual Basic).

   Component of .NET Framework 3.5

   It is a set of methods that are defined by the
    Enumerable and Queryable classes.
LANGUAGE INTEGRATED QUERY (LINQ)

      VB                       C#                       Others…

                 .NET Language-Integrated Query

                   LINQ enabled data sources

                      LINQ enabled ADO.NET

   LINQ
                 LINQ          LINQ         LINQ            LINQ
 To Objects
              To DataSets     To SQL      To Entities      To XML


                                                           <book>
                                                             <title/>
                                                             <author/>
                                                             <price/>
                                                           </book>

 Objects                    Relational                      XML
QUERY WITHOUT LINQ

   Objects using loops and conditions

    foreach(Customer c in customers)
      if (c.Region == "UK") ...

   Databases using SQL

    SELECT * FROM Customers WHERE Region='UK‘

   XML using XPath/XQuery

    //Customers/Customer[@Region='UK']
ADO WITHOUT LINQ

SqlConnection c = new SqlConnection(…);
c.Open();
SqlCommand cmd = new SqlCommand(
                    @”SELECT c.Name, c.Phone       Query in
                     FROM Customers c               quotes
                     WHERE c.City = @p0”);
                                               Arguments loosely
cmd.Parameters[“@po”] = “London”;
                                                    bound
DataReader dr = c.Execute(cmd);
While(dr.Read()){
                                                Results loosely
    string name = r.GetString(0);                   bound
    string phone = r.GetString(1);
    Datetime date = r.GetDateTime(2);
}                                              Compiler cannot
                                                 help catch
r.Close();                                        mistakes
LIMITATIONS


o   Several steps and verbose code are required.

o   Database queries bypass all kinds of compile-time checks.

o   The SQL we write for a given DBMS is likely to fail on a
    different one.
ADVANTAGES OF USING LINQ


   Works with any data source.
   Compile-time syntax checking, and debugging support.
   IntelliSense, Design time support.
   Same basic syntax for different types of data sources.
   Providing designer tools that create object-relational
    mappings.
THE SYNTAX
                 Starts with
                    from
                                       Zero or more from,
                                       join, let, where, or
  from id in source                    orderby
{ from id in source |
  join id in source on expr equals expr [ into id ] |
  let id = expr |
                                              Ends with
  where condition |                         select or group
                                                   by
  orderby ordering, ordering, … }
  select expr | group expr by key
[ into id query ]
                               Optional into
                               continuation
LANGUAGE FEATURES SUPPORTING THE LINQ
PROJECT
LANGUAGE FEATURES
    SUPPORTING THE LINQ PROJECT
   Lambda expressions
   Extension methods
   Initialization of objects and collections in expression context
   Local types inference
   Anonymous types
   Lazy evaluation

    +Query Expressions
                                            = LINQ 
LAMBDA EXPRESSIONS

   Express the implementation of a method and the
    instantiation of a delegate from that method; they have the
    form:
    c => c + 1
    which means a function with an argument, that returns the
    value of the argument incremented by one

   The parameters of a lambda expression can be explicitly or
    implicitly typed.
Examples of lambda expressions

  x => x + 1                     // Implicitly typed, expression body
  x => { return x + 1; }         // Implicitly typed, statement body
  (int x) => x + 1               // Explicitly typed, expression body
  (int x) => { return x + 1; }   // Explicitly typed, statement body
  (x, y) => x * y                // Multiple parameters
  () => Console.WriteLine()      // No parameters

  A lambda expression is a value, that does not have a type but can be
  implicitly converted to a compatible delegate type

  delegate R Func<A,R>(A arg);
  Func<int,int> f1 = x => x + 1;                  // Ok
  Func<int,double> f2 = x => x + 1;               // Ok
  Func<double,int> f3 = x => x + 1;               // Error – double cannot be
                                                  //implicitly converted to int
EXTENSION METHODS
   Extend classes that you could not modify.

   They are defined as static methods of other classes that
    take at least one parameter, and the first parameter has
    the type of the class it extends, but preceded by the
    keyword this
EXTENSION METHODS (C#)
                                           Extension
                                           method
 namespace MyStuff
 {
    public static class Extensions
    {
      public static string Concatenate(this IEnumerable<string>
 strings,
         string separator) {…}
    }
 }
                                      Brings extensions into
                                      scope
   using MyStuff;

 string[] names = new string[] { "Jenny", "Daniel",
 "Rita" };                                                       obj.Foo(x, y)
 string s = names.Concatenate(", ");                                  
                                                               XXX.Foo(obj, x, y)

                      IntelliSense!
Example of Extension Method:

  public static int VowelCount(this String source)
  {

  int count = 0;
  List<char> vowels = new List<char>() { 'a', 'e', 'i', 'o', 'u', 'A‘,'E', 'I', 'O', 'U' };
  foreach (char c in source)
  {
    if (vowels.Contains(c))
    count++;
  }

  return count;
  }

  string name = “extension”;
  int count = name.VowelCount();
INITIALIZATION OF OBJECTS AND
  COLLECTIONS IN EXPRESSION
           CONTEXT
Object initializers let you assign values to any accessible fields or
properties of an object at creation time without having to explicitly
invoke a constructor.

Example:

private class Cat
{
    // Auto-implemented properties.
    public int Age { get; set; }
    public string Name { get; set; }
}

Cat cat = new Cat { Age = 10, Name = "Fluffy" };
Collection Initializers

  Collection initializers let you specify one or more element intializers
  when you initialize a collection class that implements IEnumerable.

  Two simple collection intializers
  List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };


  The following collection initializer uses object initializers to initialize
  objects of the Cat class

  List<Cat> cats = new List<Cat>
  {
  new Cat(){ Name = "Sylvester", Age=8 },
  new Cat(){ Name = "Whiskers", Age=2 },
  new Cat(){ Name = "Sasha", Age=14 }
  };
Anonymous Types, Implicitly Typed variables

  An anonymous type has no name and is generated by the compiler
  based on the initialization of the object being instantiated.

  var results = from employee in employees
           join contact in contacts
           on employee.Id equals contact.Id
           select new {
              employee.FirstName, employee.LastName, contact.City };


  the part at “select new”, it’s not using any class name there to
  initialize, but it’s there and it’s anonymous

  That is the purpose of the var keyword. It infers the type of the
  object based on the data type with which it has been intialized
LOCAL VARIABLE TYPE INFERENCE (C#)

   int i = 666;
   string s = "Goodbye";
   double d = 3.14;
   int[] numbers = new int[] {1, 2, 3};
   Dictionary<int,Order> orders = new
   Dictionary<int,Order>();

   var i = 666;
   var s = "Goodbye";
   var d = 3.14;
   var numbers = new int[] {1, 2, 3};
   var orders = new Dictionary<int,Order>();


       “The type on the
       right hand side”
•   Variable type inferred from initialiser



                        Integer
                           String
      var x = 666
      var s = “Bye"      Double
      var d = 3.14
      var numbers = new Integer() {1, 2, 3}
      var orders = new Dictionary(Of Integer, Order)()
LAZY EVALUATION
   LINQ follows a lazy evaluation model
   Queries execute not when constructed, but when enumerated.
   This means you can build up a query in as many steps as you like, and it
    won't actually hit the server until you eventually start consuming the
    results.


    var query = db.Customers.Where (c => c.Name.StartsWith ("A")); query =
    query.Where (c => c.Purchases.Count() >= 2);
    var result = query.Select (c => c.Name);
    foreach (string name in result) //Only now is the query executed!
    Console.WriteLine (name);
C# 3.5 LANGUAGE INNOVATIONS

               var contacts =                         Query
                                                    expressions
                 from c in customers
                 where c.City == "Hove"
Local variable   select new { c.Name, c.Phone };
type inference

                                      Lambda
                                    expressions
                 var contacts =
                   customers
                   .Where(c => c.City == "Hove")
                   .Select(c => new { c.Name, c.Phone });
Extension
 methods          Anonymous                             Object
                    types                             initializers
GETTING STARTED WITH STANDARD QUERY
OPERATORS
GETTING STARTED WITH
STANDARD QUERY OPERATORS

   LINQ Query operators are an extension to the .NET Framework
    Class Library.

   These are a set of extension methods to perform operations in the
    context of LINQ queries.

   These operators are at the heart of the LINQ foundation and they
    are the real elements that make LINQ possible.
Some of the clauses for working with LINQ
THE FOLLOWING IS THE LIST OF STANDARD QUERY
OPERATORS ALONG WITH THEIR CATEGORY:
LINQ EXAMPLE - QUERYING AN ARRAY


//Create an array of integers
         int[] myarray = new int[] { 49, 28, 20, 15, 25,
                                     23, 24, 10, 7, 34 };

//Create a query for odd numbers
var oddNumbers = from i in myarray where i % 2 == 1 select i;

//Compose the original query to create a query for odd numbers
var sorted = from i in oddNumbers orderby i descending select i;

//Display the results of the query
foreach (int i in oddNumbers)
    Console.WriteLine(i);
Query translates to method invocation.

Where, Join, OrderBy, Select, GroupBy, …


          from c in customers
          where c.City == "Hove"
          select new { c.Name, c.Phone };


          customers
          .Where(c => c.City == "Hove")
          .Select(c => new { c.Name, c.Phone });
LINQ TO OBJECTS
LINQ TO OBJECTS
     Native query syntax in    using System;
                                using System.Query;
      C# and VB                 using System.Collections.Generic;
         IntelliSense          class app {
                                  static void Main() {
         Autocompletion            string[] names = = { "Allen", "Arthur",
                                       string[] names { "Burke", "Connor",
                                              "Frank", "Everett",
                                                "Bennett" };
     Query Operators can                     "Albert", "George",
      be used against any              IEnumerable<string> ayes };names
                                              "Harris", "David" =
                                    Func<string, bool>s[0] == 'A'); s.Length == 5;
                                           .Where(s => filter = s =>
      .NET collection               Func<string, string> extract = s => s;
                                    IEnumerable<string> expr =
      (IEnumerable<T>)              Func<string, string> s in ayes)s = s.ToUpper();
                                       foreach (string item
                                                     from project =
                                                                names
                                           Console.WriteLine(item); == 5
                                                     where s.Length
         Select, Where,            IEnumerable<string> exprs= names
                                                     orderby
                                       names[0] = "Bob";
                                           .Where(filter)
                                                     select s.ToUpper();
          GroupBy, Join, etc.              .OrderBy(extract)
                                    foreach (string item inin ayes)
                                       foreach (string item expr)
                                           .Select(project);
     Deferred Query                   Console.WriteLine(item);
                                           Console.WriteLine(item);
      Evaluation                  } foreach (string item in expr)
                                }      Console.WriteLine(item);
     Lambda Expressions          }
                                }
                                Allen
                                Arthur
                                Arthur
                                BURKE
                                DAVID
                                FRANK
BEYOND BASIC IN-MEMORY QUERIES
Querying non-generic collection

Trying to query an ArrayList using LINQ to Objects directly fails


   ArrayList books = GetArrayList();
   var query = from book in books where book.PageCount > 150
   select new { book.Title, book.Publisher.Name };


  Nongeneric collections aren’t a big problem with LINQ once you know the trick.
  The trick is to use the Cast operator
  Querying an ArrayList is possible thanks to the Cast query operator


   ArrayList books = GetArrayList();
   var query = from book in books.Cast<Book>()
   where book.PageCount > 150
   select new { book.Title, book.Publisher.Name };
   dataGridView.DataSource = query.ToList();
Grouping by multiple criteria

  var query1 = from book in SampleData.Books
  group book by book.Publisher, book.Subject;


  var query2 = from book in SampleData.Books
  group book by book.Publisher
  group book by book.Subject;


  The trick is to use an anonymous type to specify the members on which to perform the
  grouping.


  var query = from book in SampleData.Books
  group book by new { book.Publisher, book.Subject };
LINQ ARCHITECTURE
var query = from c in customers where c.City == "Hove" select c.Name;

var query = customers.Where(c => c.City == "Hove").Select(c => c.Name);


Source implements                                Source implements
IEnumerable<T>                                   IQueryable<T>

 System.Linq.Enumerable                   System.Linq.Queryable
      Delegate based                       Expression tree based




                      Objects           SQL            DataSets           Others…
GETTING STARTED WITH LINQ TO SQL
WHAT IS LINQ TO SQL?

   LINQ to SQL is an O/RM (object relational mapping) implementation
    that ships in the .NET Framework. Which allows you to model a
    relational database using .NET classes.

   You can then query the database using LINQ, as well as update/ insert/
    delete data from it.

   LINQ to SQL fully supports transactions, views, and stored procedures.

   It also provides an easy way to integrate data validation and business
    logic rules into your data model.
THE DATACONTEXT, WHAT IS IT?

   DataContext will be created for each LinqToSQL-File we
    add to our solution.

   The DataContext is the main object through which we
    will communicate with our database.

   The properties of the DataContext class are the tables
    and stored procedures in the database we
    modelled/created.
DLINQ RUNTIME SUPPORT

from c in db.Customers                       db.Customers.Add(c1);
where c.City == "London"
select c.CompanyName
                            Application      c2.City = “Seattle";
                                             db.Customers.Remove(c3);



                Enumerate      Objects    SubmitChanges()


                             LINQ to
                               SQL

                SQL Query      Rows       DML
                or SProc                  or SProcs

 SELECT CompanyName                          INSERT INTO Customer …
 FROM Customer                               UPDATE Customer …
 WHERE City = 'London'                       DELETE FROM Customer …
PEEKING UNDER THE COVERS OF LINQ TO SQL
DATA ACCESS IN DLINQ
INTRODUCTION OF LINQ TO XML
LINQ TO XML
   Large Improvement Over Existing Model

   Supports:
     Creating XML
     Loading & querying XML
     Modifying & saving XML
     Streaming, Schema, Annotations, Events
LINQ TO XML
   New XML API implemented in v3.5 assembly
       System.Xml.Linq.dll

   Namespaces
       System.Xml.Linq
       System.Xml.Schema
       System.Xml.Xpath

   Can be used independently of LINQ
KEY CLASSES IN SYSTEM.XML.LINQ
   System.Xml.Linq is a “DOM like” API
       Manipulates an XML tree in memory

   Naturally work with both XML documents and fragments

   The two key classes in System.Xml.Linq
LOADING XML CONTENT
   Loading Xml is performed with;
     XElement.Load
     XDocument.Load


   Both support loading from
       URI, XmlReader, TextReader
MODIFYING XML
   XML tree exposed by XElement is modifiable
   Modifications through methods such as:
      XElement.Add()
      XElement.Remove()
      XElement.ReplaceWith()
   Modified tree can be persisted via
      XElement.Save(), XDocument.Save()
      Both supporting filename, TextWriter, XmlWriter.
CREATING AN XML DOCUMENT
XNamespace ns = "http://example.books.com";
   XDocument books = new XDocument(
      new XElement(ns + "bookstore",
         new XElement(ns + "book",
            new XAttribute("ISBN", isbn),
            new XElement(ns + "title", "ASP.NET Book"),
            new XElement(ns + "author",
            new XElement(ns + "first-name", a.FirstName),
            new XElement(ns + "last-name", a.LastName)
         )
      )
   )
);

books.Save(@"C:Books.xml");
…MEANWHILE IN C#
   No XML Literals, But There’s
    Something to Close the Gap
   “Paste XML as XElement” Add-in
      Add XML to Clipboard
      Edit -> Past XML as XElement
   Included in VS2008 Samples
      Help -> Samples

Mais conteúdo relacionado

Mais procurados

Spring Framework
Spring Framework  Spring Framework
Spring Framework tola99
 
Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)Michelle Anne Meralpis
 
C# Exceptions Handling
C# Exceptions Handling C# Exceptions Handling
C# Exceptions Handling sharqiyem
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
Reading and Writing Files
Reading and Writing FilesReading and Writing Files
Reading and Writing Filesprimeteacher32
 
The virtual DOM and how react uses it internally
The virtual DOM and how react uses it internallyThe virtual DOM and how react uses it internally
The virtual DOM and how react uses it internallyClóvis Neto
 
PL/SQL Fundamentals I
PL/SQL Fundamentals IPL/SQL Fundamentals I
PL/SQL Fundamentals INick Buytaert
 
Basic Java Database Connectivity(JDBC)
Basic Java Database Connectivity(JDBC)Basic Java Database Connectivity(JDBC)
Basic Java Database Connectivity(JDBC)suraj pandey
 
Java Server Pages(jsp)
Java Server Pages(jsp)Java Server Pages(jsp)
Java Server Pages(jsp)Manisha Keim
 
Java CRUD Mechanism with SQL Server Database
Java CRUD Mechanism with SQL Server DatabaseJava CRUD Mechanism with SQL Server Database
Java CRUD Mechanism with SQL Server DatabaseDudy Ali
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Expressjguerrero999
 

Mais procurados (20)

Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Introduction to c#
Introduction to c#Introduction to c#
Introduction to c#
 
Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)
 
C# Exceptions Handling
C# Exceptions Handling C# Exceptions Handling
C# Exceptions Handling
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
Reading and Writing Files
Reading and Writing FilesReading and Writing Files
Reading and Writing Files
 
Java Basic Oops Concept
Java Basic Oops ConceptJava Basic Oops Concept
Java Basic Oops Concept
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
String in java
String in javaString in java
String in java
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
The virtual DOM and how react uses it internally
The virtual DOM and how react uses it internallyThe virtual DOM and how react uses it internally
The virtual DOM and how react uses it internally
 
PL/SQL Fundamentals I
PL/SQL Fundamentals IPL/SQL Fundamentals I
PL/SQL Fundamentals I
 
Solid principles
Solid principlesSolid principles
Solid principles
 
C# File IO Operations
C# File IO OperationsC# File IO Operations
C# File IO Operations
 
Basic Java Database Connectivity(JDBC)
Basic Java Database Connectivity(JDBC)Basic Java Database Connectivity(JDBC)
Basic Java Database Connectivity(JDBC)
 
Java swing
Java swingJava swing
Java swing
 
C sharp
C sharpC sharp
C sharp
 
Java Server Pages(jsp)
Java Server Pages(jsp)Java Server Pages(jsp)
Java Server Pages(jsp)
 
Java CRUD Mechanism with SQL Server Database
Java CRUD Mechanism with SQL Server DatabaseJava CRUD Mechanism with SQL Server Database
Java CRUD Mechanism with SQL Server Database
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Express
 

Destaque (7)

Introduction Of Linq , ASP.NET Training Ahmedabad, ASP.NET Course Ahmedabad
Introduction Of Linq , ASP.NET Training Ahmedabad, ASP.NET Course AhmedabadIntroduction Of Linq , ASP.NET Training Ahmedabad, ASP.NET Course Ahmedabad
Introduction Of Linq , ASP.NET Training Ahmedabad, ASP.NET Course Ahmedabad
 
tybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notestybsc it asp.net full unit 1,2,3,4,5,6 notes
tybsc it asp.net full unit 1,2,3,4,5,6 notes
 
Linq
LinqLinq
Linq
 
Linq in asp.net
Linq in asp.netLinq in asp.net
Linq in asp.net
 
Introduction to ASP.NET
Introduction to ASP.NETIntroduction to ASP.NET
Introduction to ASP.NET
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
Developing an ASP.NET Web Application
Developing an ASP.NET Web ApplicationDeveloping an ASP.NET Web Application
Developing an ASP.NET Web Application
 

Semelhante a Understanding linq

Share pointtechies linqtosp-andsbs
Share pointtechies linqtosp-andsbsShare pointtechies linqtosp-andsbs
Share pointtechies linqtosp-andsbsShakir Majeed Khan
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 
Linq in C# 3.0: An Overview
Linq in C# 3.0: An OverviewLinq in C# 3.0: An Overview
Linq in C# 3.0: An Overviewpradeepkothiyal
 
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05CHOOSE
 
C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8Christian Nagel
 
IntroToCSharpcode.ppt
IntroToCSharpcode.pptIntroToCSharpcode.ppt
IntroToCSharpcode.pptpsundarau
 
Introduction to-csharp
Introduction to-csharpIntroduction to-csharp
Introduction to-csharpSDFG5
 
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...NALESVPMEngg
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.pptAlmamoon
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.pptmothertheressa
 
DITEC - Programming with C#.NET
DITEC - Programming with C#.NETDITEC - Programming with C#.NET
DITEC - Programming with C#.NETRasan Samarasinghe
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29Bilal Ahmed
 

Semelhante a Understanding linq (20)

Linq Introduction
Linq IntroductionLinq Introduction
Linq Introduction
 
Introduction to Linq
Introduction to LinqIntroduction to Linq
Introduction to Linq
 
Share pointtechies linqtosp-andsbs
Share pointtechies linqtosp-andsbsShare pointtechies linqtosp-andsbs
Share pointtechies linqtosp-andsbs
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Linq in C# 3.0: An Overview
Linq in C# 3.0: An OverviewLinq in C# 3.0: An Overview
Linq in C# 3.0: An Overview
 
Ds lab handouts
Ds lab handoutsDs lab handouts
Ds lab handouts
 
Linq
LinqLinq
Linq
 
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
Ralf Laemmel - Not quite a sales pitch for C# 3.0 and .NET's LINQ - 2008-03-05
 
Linq intro
Linq introLinq intro
Linq intro
 
C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8
 
Java gets a closure
Java gets a closureJava gets a closure
Java gets a closure
 
Amusing C#
Amusing C#Amusing C#
Amusing C#
 
IntroToCSharpcode.ppt
IntroToCSharpcode.pptIntroToCSharpcode.ppt
IntroToCSharpcode.ppt
 
Introduction to-csharp
Introduction to-csharpIntroduction to-csharp
Introduction to-csharp
 
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
 
Lesson11
Lesson11Lesson11
Lesson11
 
DITEC - Programming with C#.NET
DITEC - Programming with C#.NETDITEC - Programming with C#.NET
DITEC - Programming with C#.NET
 
CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29CS101- Introduction to Computing- Lecture 29
CS101- Introduction to Computing- Lecture 29
 

Mais de Anand Kumar Rajana (13)

Interface Vs Abstact
Interface Vs AbstactInterface Vs Abstact
Interface Vs Abstact
 
Anand's Leadership Assessment
Anand's Leadership AssessmentAnand's Leadership Assessment
Anand's Leadership Assessment
 
Rhino Mocks
Rhino MocksRhino Mocks
Rhino Mocks
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
The Seven Pillars Of Asp.Net
The Seven Pillars Of Asp.NetThe Seven Pillars Of Asp.Net
The Seven Pillars Of Asp.Net
 
What Do You Mean By NUnit
What Do You Mean By NUnitWhat Do You Mean By NUnit
What Do You Mean By NUnit
 
Wcf
WcfWcf
Wcf
 
Sql Server 2012 Installation..
Sql Server 2012 Installation..Sql Server 2012 Installation..
Sql Server 2012 Installation..
 
Json
JsonJson
Json
 
Jquery Ajax
Jquery AjaxJquery Ajax
Jquery Ajax
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
jQuery Ajax
jQuery AjaxjQuery Ajax
jQuery Ajax
 
J Query Introduction And JQuery Selectors
J Query Introduction And JQuery SelectorsJ Query Introduction And JQuery Selectors
J Query Introduction And JQuery Selectors
 

Último

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 

Último (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 

Understanding linq

  • 2. INDEX  Introduction to LINQ  Why LINQ?  Language features supporting the LINQ project  Getting started with standard query operators  LINQ to Objects  Beyond basic in-memory queries  Getting started with LINQ to SQL  Peeking under the covers of LINQ to SQL  Introducing LINQ to XML
  • 3. INTRODUCTION TO LINQ  Linq is short for Language Integrated Query.  We use the term language-integrated query to indicate that query is an integrated feature of the developer's primary programming languages (for example, Visual C#, Visual Basic).  Component of .NET Framework 3.5  It is a set of methods that are defined by the Enumerable and Queryable classes.
  • 4. LANGUAGE INTEGRATED QUERY (LINQ) VB C# Others… .NET Language-Integrated Query LINQ enabled data sources LINQ enabled ADO.NET LINQ LINQ LINQ LINQ LINQ To Objects To DataSets To SQL To Entities To XML <book> <title/> <author/> <price/> </book> Objects Relational XML
  • 5. QUERY WITHOUT LINQ  Objects using loops and conditions foreach(Customer c in customers) if (c.Region == "UK") ...  Databases using SQL SELECT * FROM Customers WHERE Region='UK‘  XML using XPath/XQuery //Customers/Customer[@Region='UK']
  • 6. ADO WITHOUT LINQ SqlConnection c = new SqlConnection(…); c.Open(); SqlCommand cmd = new SqlCommand( @”SELECT c.Name, c.Phone Query in FROM Customers c quotes WHERE c.City = @p0”); Arguments loosely cmd.Parameters[“@po”] = “London”; bound DataReader dr = c.Execute(cmd); While(dr.Read()){ Results loosely string name = r.GetString(0); bound string phone = r.GetString(1); Datetime date = r.GetDateTime(2); } Compiler cannot help catch r.Close(); mistakes
  • 7. LIMITATIONS o Several steps and verbose code are required. o Database queries bypass all kinds of compile-time checks. o The SQL we write for a given DBMS is likely to fail on a different one.
  • 8. ADVANTAGES OF USING LINQ  Works with any data source.  Compile-time syntax checking, and debugging support.  IntelliSense, Design time support.  Same basic syntax for different types of data sources.  Providing designer tools that create object-relational mappings.
  • 9. THE SYNTAX Starts with from Zero or more from, join, let, where, or from id in source orderby { from id in source | join id in source on expr equals expr [ into id ] | let id = expr | Ends with where condition | select or group by orderby ordering, ordering, … } select expr | group expr by key [ into id query ] Optional into continuation
  • 10. LANGUAGE FEATURES SUPPORTING THE LINQ PROJECT
  • 11. LANGUAGE FEATURES SUPPORTING THE LINQ PROJECT  Lambda expressions  Extension methods  Initialization of objects and collections in expression context  Local types inference  Anonymous types  Lazy evaluation +Query Expressions = LINQ 
  • 12. LAMBDA EXPRESSIONS  Express the implementation of a method and the instantiation of a delegate from that method; they have the form: c => c + 1 which means a function with an argument, that returns the value of the argument incremented by one  The parameters of a lambda expression can be explicitly or implicitly typed.
  • 13. Examples of lambda expressions x => x + 1 // Implicitly typed, expression body x => { return x + 1; } // Implicitly typed, statement body (int x) => x + 1 // Explicitly typed, expression body (int x) => { return x + 1; } // Explicitly typed, statement body (x, y) => x * y // Multiple parameters () => Console.WriteLine() // No parameters A lambda expression is a value, that does not have a type but can be implicitly converted to a compatible delegate type delegate R Func<A,R>(A arg); Func<int,int> f1 = x => x + 1; // Ok Func<int,double> f2 = x => x + 1; // Ok Func<double,int> f3 = x => x + 1; // Error – double cannot be //implicitly converted to int
  • 14. EXTENSION METHODS  Extend classes that you could not modify.  They are defined as static methods of other classes that take at least one parameter, and the first parameter has the type of the class it extends, but preceded by the keyword this
  • 15. EXTENSION METHODS (C#) Extension method namespace MyStuff { public static class Extensions { public static string Concatenate(this IEnumerable<string> strings, string separator) {…} } } Brings extensions into scope using MyStuff; string[] names = new string[] { "Jenny", "Daniel", "Rita" }; obj.Foo(x, y) string s = names.Concatenate(", ");  XXX.Foo(obj, x, y) IntelliSense!
  • 16. Example of Extension Method: public static int VowelCount(this String source) { int count = 0; List<char> vowels = new List<char>() { 'a', 'e', 'i', 'o', 'u', 'A‘,'E', 'I', 'O', 'U' }; foreach (char c in source) { if (vowels.Contains(c)) count++; } return count; } string name = “extension”; int count = name.VowelCount();
  • 17. INITIALIZATION OF OBJECTS AND COLLECTIONS IN EXPRESSION CONTEXT Object initializers let you assign values to any accessible fields or properties of an object at creation time without having to explicitly invoke a constructor. Example: private class Cat { // Auto-implemented properties. public int Age { get; set; } public string Name { get; set; } } Cat cat = new Cat { Age = 10, Name = "Fluffy" };
  • 18.
  • 19. Collection Initializers Collection initializers let you specify one or more element intializers when you initialize a collection class that implements IEnumerable. Two simple collection intializers List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() }; The following collection initializer uses object initializers to initialize objects of the Cat class List<Cat> cats = new List<Cat> { new Cat(){ Name = "Sylvester", Age=8 }, new Cat(){ Name = "Whiskers", Age=2 }, new Cat(){ Name = "Sasha", Age=14 } };
  • 20. Anonymous Types, Implicitly Typed variables An anonymous type has no name and is generated by the compiler based on the initialization of the object being instantiated. var results = from employee in employees join contact in contacts on employee.Id equals contact.Id select new { employee.FirstName, employee.LastName, contact.City }; the part at “select new”, it’s not using any class name there to initialize, but it’s there and it’s anonymous That is the purpose of the var keyword. It infers the type of the object based on the data type with which it has been intialized
  • 21. LOCAL VARIABLE TYPE INFERENCE (C#) int i = 666; string s = "Goodbye"; double d = 3.14; int[] numbers = new int[] {1, 2, 3}; Dictionary<int,Order> orders = new Dictionary<int,Order>(); var i = 666; var s = "Goodbye"; var d = 3.14; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary<int,Order>(); “The type on the right hand side”
  • 22. Variable type inferred from initialiser Integer String var x = 666 var s = “Bye" Double var d = 3.14 var numbers = new Integer() {1, 2, 3} var orders = new Dictionary(Of Integer, Order)()
  • 23. LAZY EVALUATION  LINQ follows a lazy evaluation model  Queries execute not when constructed, but when enumerated.  This means you can build up a query in as many steps as you like, and it won't actually hit the server until you eventually start consuming the results. var query = db.Customers.Where (c => c.Name.StartsWith ("A")); query = query.Where (c => c.Purchases.Count() >= 2); var result = query.Select (c => c.Name); foreach (string name in result) //Only now is the query executed! Console.WriteLine (name);
  • 24. C# 3.5 LANGUAGE INNOVATIONS var contacts = Query expressions from c in customers where c.City == "Hove" Local variable select new { c.Name, c.Phone }; type inference Lambda expressions var contacts = customers .Where(c => c.City == "Hove") .Select(c => new { c.Name, c.Phone }); Extension methods Anonymous Object types initializers
  • 25. GETTING STARTED WITH STANDARD QUERY OPERATORS
  • 26. GETTING STARTED WITH STANDARD QUERY OPERATORS  LINQ Query operators are an extension to the .NET Framework Class Library.  These are a set of extension methods to perform operations in the context of LINQ queries.  These operators are at the heart of the LINQ foundation and they are the real elements that make LINQ possible.
  • 27. Some of the clauses for working with LINQ
  • 28. THE FOLLOWING IS THE LIST OF STANDARD QUERY OPERATORS ALONG WITH THEIR CATEGORY:
  • 29.
  • 30. LINQ EXAMPLE - QUERYING AN ARRAY //Create an array of integers int[] myarray = new int[] { 49, 28, 20, 15, 25, 23, 24, 10, 7, 34 }; //Create a query for odd numbers var oddNumbers = from i in myarray where i % 2 == 1 select i; //Compose the original query to create a query for odd numbers var sorted = from i in oddNumbers orderby i descending select i; //Display the results of the query foreach (int i in oddNumbers) Console.WriteLine(i);
  • 31. Query translates to method invocation. Where, Join, OrderBy, Select, GroupBy, … from c in customers where c.City == "Hove" select new { c.Name, c.Phone }; customers .Where(c => c.City == "Hove") .Select(c => new { c.Name, c.Phone });
  • 33. LINQ TO OBJECTS  Native query syntax in using System; using System.Query; C# and VB using System.Collections.Generic;  IntelliSense class app { static void Main() {  Autocompletion string[] names = = { "Allen", "Arthur", string[] names { "Burke", "Connor", "Frank", "Everett", "Bennett" };  Query Operators can "Albert", "George", be used against any IEnumerable<string> ayes };names "Harris", "David" = Func<string, bool>s[0] == 'A'); s.Length == 5; .Where(s => filter = s => .NET collection Func<string, string> extract = s => s; IEnumerable<string> expr = (IEnumerable<T>) Func<string, string> s in ayes)s = s.ToUpper(); foreach (string item from project = names Console.WriteLine(item); == 5 where s.Length  Select, Where, IEnumerable<string> exprs= names orderby names[0] = "Bob"; .Where(filter) select s.ToUpper(); GroupBy, Join, etc. .OrderBy(extract) foreach (string item inin ayes) foreach (string item expr) .Select(project);  Deferred Query Console.WriteLine(item); Console.WriteLine(item); Evaluation } foreach (string item in expr) } Console.WriteLine(item);  Lambda Expressions } } Allen Arthur Arthur BURKE DAVID FRANK
  • 35. Querying non-generic collection Trying to query an ArrayList using LINQ to Objects directly fails ArrayList books = GetArrayList(); var query = from book in books where book.PageCount > 150 select new { book.Title, book.Publisher.Name }; Nongeneric collections aren’t a big problem with LINQ once you know the trick. The trick is to use the Cast operator Querying an ArrayList is possible thanks to the Cast query operator ArrayList books = GetArrayList(); var query = from book in books.Cast<Book>() where book.PageCount > 150 select new { book.Title, book.Publisher.Name }; dataGridView.DataSource = query.ToList();
  • 36. Grouping by multiple criteria var query1 = from book in SampleData.Books group book by book.Publisher, book.Subject; var query2 = from book in SampleData.Books group book by book.Publisher group book by book.Subject; The trick is to use an anonymous type to specify the members on which to perform the grouping. var query = from book in SampleData.Books group book by new { book.Publisher, book.Subject };
  • 37. LINQ ARCHITECTURE var query = from c in customers where c.City == "Hove" select c.Name; var query = customers.Where(c => c.City == "Hove").Select(c => c.Name); Source implements Source implements IEnumerable<T> IQueryable<T> System.Linq.Enumerable System.Linq.Queryable Delegate based Expression tree based Objects SQL DataSets Others…
  • 38. GETTING STARTED WITH LINQ TO SQL
  • 39. WHAT IS LINQ TO SQL?  LINQ to SQL is an O/RM (object relational mapping) implementation that ships in the .NET Framework. Which allows you to model a relational database using .NET classes.  You can then query the database using LINQ, as well as update/ insert/ delete data from it.  LINQ to SQL fully supports transactions, views, and stored procedures.  It also provides an easy way to integrate data validation and business logic rules into your data model.
  • 40. THE DATACONTEXT, WHAT IS IT?  DataContext will be created for each LinqToSQL-File we add to our solution.  The DataContext is the main object through which we will communicate with our database.  The properties of the DataContext class are the tables and stored procedures in the database we modelled/created.
  • 41. DLINQ RUNTIME SUPPORT from c in db.Customers db.Customers.Add(c1); where c.City == "London" select c.CompanyName Application c2.City = “Seattle"; db.Customers.Remove(c3); Enumerate Objects SubmitChanges() LINQ to SQL SQL Query Rows DML or SProc or SProcs SELECT CompanyName INSERT INTO Customer … FROM Customer UPDATE Customer … WHERE City = 'London' DELETE FROM Customer …
  • 42. PEEKING UNDER THE COVERS OF LINQ TO SQL
  • 43. DATA ACCESS IN DLINQ
  • 45. LINQ TO XML  Large Improvement Over Existing Model  Supports:  Creating XML  Loading & querying XML  Modifying & saving XML  Streaming, Schema, Annotations, Events
  • 46. LINQ TO XML  New XML API implemented in v3.5 assembly  System.Xml.Linq.dll  Namespaces  System.Xml.Linq  System.Xml.Schema  System.Xml.Xpath  Can be used independently of LINQ
  • 47. KEY CLASSES IN SYSTEM.XML.LINQ  System.Xml.Linq is a “DOM like” API  Manipulates an XML tree in memory  Naturally work with both XML documents and fragments  The two key classes in System.Xml.Linq
  • 48. LOADING XML CONTENT  Loading Xml is performed with;  XElement.Load  XDocument.Load  Both support loading from  URI, XmlReader, TextReader
  • 49. MODIFYING XML  XML tree exposed by XElement is modifiable  Modifications through methods such as:  XElement.Add()  XElement.Remove()  XElement.ReplaceWith()  Modified tree can be persisted via  XElement.Save(), XDocument.Save()  Both supporting filename, TextWriter, XmlWriter.
  • 50. CREATING AN XML DOCUMENT XNamespace ns = "http://example.books.com"; XDocument books = new XDocument( new XElement(ns + "bookstore", new XElement(ns + "book", new XAttribute("ISBN", isbn), new XElement(ns + "title", "ASP.NET Book"), new XElement(ns + "author", new XElement(ns + "first-name", a.FirstName), new XElement(ns + "last-name", a.LastName) ) ) ) ); books.Save(@"C:Books.xml");
  • 51. …MEANWHILE IN C#  No XML Literals, But There’s Something to Close the Gap  “Paste XML as XElement” Add-in  Add XML to Clipboard  Edit -> Past XML as XElement  Included in VS2008 Samples  Help -> Samples