SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in javaNilesh Dalvi
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaEdureka!
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object ModelWebStackAcademy
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introductionRasheed Waraich
 
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The BasicsJeff Fox
 
Classes and Nested Classes in Java
Classes and Nested Classes in JavaClasses and Nested Classes in Java
Classes and Nested Classes in JavaRavi_Kant_Sahu
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Edureka!
 
Collections In Java
Collections In JavaCollections In Java
Collections In JavaBinoj T E
 
Introduction to SOAP/WSDL Web Services and RESTful Web Services
Introduction to SOAP/WSDL Web Services and RESTful Web ServicesIntroduction to SOAP/WSDL Web Services and RESTful Web Services
Introduction to SOAP/WSDL Web Services and RESTful Web Servicesecosio GmbH
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQTonymx
 
Jdbc architecture and driver types ppt
Jdbc architecture and driver types pptJdbc architecture and driver types ppt
Jdbc architecture and driver types pptkamal kotecha
 
Java ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaJava ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaEdureka!
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET CoreAvanade Nederland
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/ServletSunil OS
 

Was ist angesagt? (20)

9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in java
 
Json
JsonJson
Json
 
Jdbc ppt
Jdbc pptJdbc ppt
Jdbc ppt
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Generics in java
Generics in javaGenerics in java
Generics in java
 
JSON: The Basics
JSON: The BasicsJSON: The Basics
JSON: The Basics
 
Classes and Nested Classes in Java
Classes and Nested Classes in JavaClasses and Nested Classes in Java
Classes and Nested Classes in Java
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
 
Collections In Java
Collections In JavaCollections In Java
Collections In Java
 
Introduction to SOAP/WSDL Web Services and RESTful Web Services
Introduction to SOAP/WSDL Web Services and RESTful Web ServicesIntroduction to SOAP/WSDL Web Services and RESTful Web Services
Introduction to SOAP/WSDL Web Services and RESTful Web Services
 
Introduccion a LINQ
Introduccion a LINQIntroduccion a LINQ
Introduccion a LINQ
 
Jdbc architecture and driver types ppt
Jdbc architecture and driver types pptJdbc architecture and driver types ppt
Jdbc architecture and driver types ppt
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
Java ArrayList Tutorial | Edureka
Java ArrayList Tutorial | EdurekaJava ArrayList Tutorial | Edureka
Java ArrayList Tutorial | Edureka
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
 
Spring beans
Spring beansSpring beans
Spring beans
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/Servlet
 

Andere mochten auch

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Kürzlich hochgeladen

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
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]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
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
 
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
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
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
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Kürzlich hochgeladen (20)

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
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]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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
 
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
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
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
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

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