Professional Documents
Culture Documents
LINQ
• Language-Integrated Query (LINQ)
• It extends powerful query capabilities to the
language syntax of C#
LINQ
• LINQ introduces standard, easily-learned
patterns for querying and updating data
Language Integrated Queries in C# • The technology can be extended to support
potentially any kind of data store.
• Visual Studio includes LINQ provider assemblies
that enable the use of LINQ with .NET
Framework collections, SQL Server databases,
ADO.NET Datasets, and XML documents.
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
1
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
2
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
3
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
4
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
5
10/9/2016
Joining Example
using System;
• Joining refers to combining data from two using System.Linq;
class Student
data sources based on some common fields {
public int Id { get; set; }
in both the data sources. public string Name { get; set; }
public Student(int id, string name)
• Syntax: {
this.Id = id;
this.Name = name;
from var1 in DataSource1 }
}
class Enroll
join var2 in DataSource2 {
public int Id { get; set; }
on var1.property equals var2.property public string CourseName { get; set; }
public Enroll(int id, string name)
{
this.Id = id;
this.CourseName = name;
}
}
ranjan2130@gmail.com ranjan2130@gmail.com
Cont… Cont…
class StudentEnroll class Program
{ {
public int Id { get; set; } static void Main(string[] args)
{
public string Name { get; set; } Student[] students = { new Student(1, "Hari"),
public string CourseName { get; set; } new Student(2, "Ravi"),
public StudentEnroll(int id, string name, string cname) new Student(3, "Narender"),
{ new Student(4, "Sandeep") };
this.Id = id; Enroll[] enrollments = { new Enroll(1, ".NET"),
this.Name = name; new Enroll(2, "SAP"),
this.CourseName = cname; new Enroll(3, "SAP"),
new Enroll(4, "SAP") };
}
var join = from s in students
} join e in enrollments on s.Id equals e.Id
select new StudentEnroll(s.Id, s.Name,
e.CourseName);
foreach (var ex in join)
{
Console.WriteLine(ex.Name + ":" + ex.CourseName);
}
}
}
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
6
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
7
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
ranjan2130@gmail.com ranjan2130@gmail.com
8
10/9/2016
ranjan2130@gmail.com ranjan2130@gmail.com
Few LINQ Examples using Lambda Few LINQ Examples using Lambda
using System;
using System.Linq; foreach (var n in query)
using System.Collections; Console.Write(n + " ");
public static class Program Console.WriteLine();
{ query = ar.TakeWhile(n => n < 10);
public static bool IsVowel(this char ch) foreach (var n in query)
{ Console.Write(n + " ");
return "AEIOU".Contains(Char.ToUpper(ch)); Console.WriteLine();
} query = ar.SkipWhile(n => n < 10).OrderBy(n => n);
static void Main(string[] args) foreach (var n in query)
{ Console.Write(n + " ");
int[] ar = { 1, 5, 2, 15, 19, 30, 21, 6, 4 }; Console.WriteLine();
string[] words = { "aPPLE", "MaNGo", "BanaNNa", "GraPeS" }; //Indexed Lambda Expression
var query = ar.Where(n => n % 2 == 0); query = ar.Where((n, index) => n > index);
foreach (var n in query) foreach (var n in query)
Console.Write(n + " "); Console.Write(n + " ");
Console.WriteLine(); Console.WriteLine();
query = ar.Where(n => n % 2 == 0); //Projection Query
query = query.OrderBy(n => n); query = ar.Select((n, index) => n + index);
var query1 = from n in query where n % 2 == 0 select n; foreach (var n in query)
query = from n in query1 orderby n select n; Console.Write(n + " ");
query = from n in ar where n % 2 == 0 orderby n select n; Console.WriteLine();
query = (from n in ar //Distinct
select n).OrderBy(n => n).Skip(3).Take(3); var newwords = new string[] { "One", "Two", "banana",
"One", "Two", "apple" };
ranjan2130@gmail.com ranjan2130@gmail.com
Few LINQ Examples using Lambda Few LINQ Examples using Lambda
foreach (var n in newwords.Distinct()) var dicWords = words.ToDictionary(w => w[0]);
Console.Write(n + " "); //First char of word is Key and word is value
Console.WriteLine(); Console.WriteLine("Key: {0} and Value: {1}",
//Concat - Duplicates can be present 'T', dicWords['T']);
foreach (var n in words.Concat(newwords)) //Using Non-Generic Collection classes.
Console.Write(n + " "); ArrayList lst = new ArrayList();
Console.WriteLine(); lst.AddRange(new int[] { 1, 2, 3, 4, 5 });
//Union - Will not have duplicates query = lst.Cast<int>();
foreach (var n in words.Union(newwords)) foreach (var n in query)
Console.Write(n + " "); Console.WriteLine(n);
Console.WriteLine(); object[] mixedArray = { "Hello", 12, true, 'a',
//Intersect 123.456, DateTime.Parse("5/11/1956"), "Goodbye" };
foreach (var n in words.Intersect(newwords)) //To get all integers from an object array
Console.Write(n + " "); query = mixedArray.OfType<int>();
Console.WriteLine(); Console.WriteLine("Count: " + ar.Count());
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; Console.WriteLine("Sum: " + ar.Sum());
int[] numbersB = { 1, 3, 5, 7, 8 }; Console.WriteLine("Min: " + ar.Min());
//Except - Prints numbers of numbersA which are not in numbersB Console.WriteLine("Max: " + ar.Max());
foreach (var n in numbersA.Except(numbersB)) Console.WriteLine("Average: " + ar.Average());
Console.Write(n + " "); //Extension Method Example
Console.WriteLine(); string testString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//ToArray var vowels = testString.Where(ch => ch.IsVowel());
int[] array = ar.ToArray(); Console.WriteLine("Total Vowel Count = " + vowels.Count());
//ToDictionary - Collection of Key - Value pairs }
words = new string[] { "One", "Two", "Four", "Six" }; }
ranjan2130@gmail.com ranjan2130@gmail.com
9
10/9/2016
Thanks
ranjan2130@gmail.com ranjan2130@gmail.com
10