Dość długi przykład z różnymi podstawowymi zapytaniami LINQ:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_5
{
class Program
{
// Przykładowe zbiory danych
private static int[] Liczby1 = new int[] { 10, 2, 3, 56, 101, 23, 2, 8, 9, 10, 5 };
private static int[] Liczby2 = new int[] { 2, 4, 6, 7, 2, 3, 7 };
private static string[] Nazwy = { "Sun", "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus",
"Neptune", "Pluto" };
public static void Linq_Where1()
{
// Wybranie liczb mniejszych od 10
var MniejszeOd10 = from n in Liczby1
where n < 10
select n;
Console.WriteLine("\nLiczby mniejsze od 10: ");
foreach (var liczba in MniejszeOd10)
{
Console.Write("{0} ", liczba);
}
}
public static void Linq_Where2()
{
var O2WiekszeParzyste = from p in Liczby1
where p % 2 == 0
select p + 2;
Console.WriteLine("\nLiczby parzyste zwiększone o 2:");
foreach (var liczba in O2WiekszeParzyste)
{
Console.Write("{0} ", liczba);
}
}
public static void Linq_WhereAnonymous()
{
var words = from n in Nazwy
where n.EndsWith("s")
select new { Lower = n.ToLower(), Upper = n.ToUpper() };
Console.WriteLine("\nSłowa kończące się na 's' małymi i dużymi literami:");
foreach (var word in words)
{
Console.Write(word.Lower);
Console.Write(word.Upper);
}
}
public static void Linq_DoubleFrom()
{
var pairs = from n1 in Liczby1
from n2 in Liczby2
where n1 < n2 && n2 % 2 == 0
select new { n1, n2 };
Console.WriteLine("\nPary liczb (n1, n2) takie, że n1 < n2 i n2 parzyste: ");
foreach (var pair in pairs)
{
Console.Write("({0},{1}) ", pair.n1, pair.n2);
}
}
public static void Linq_Take1()
{
var Taken = (from n1 in Liczby1
select n1).Take(3);
Console.WriteLine("\nPierwsze 3 liczby:");
foreach (var liczba in Taken)
{
Console.Write("{0} ", liczba);
}
}
public static void Linq_Orderby1()
{
var WordsOrdered = from ww in Nazwy
orderby ww descending // po przecinku dalsze uporządkowania
select ww;
Console.WriteLine("\nSłowa uporządkowane malejąco:");
foreach (var word in WordsOrdered)
{
Console.Write("{0} ", word);
}
}
public static void Linq_Group1()
{
var numberGroups =
from n in Liczby1
group n by n % 5 into g
select new { Remainder = g.Key, Numbers = g };
foreach (var g in numberGroups)
{
Console.WriteLine("\nLiczby, które po podzieleniu przez 5 dają resztę równą: {0}", g.Remainder);
foreach (var n in g.Numbers)
{
Console.Write("{0} ", n);
}
}
}
public static void Linq_Group2()
{
var wordGroups =
from w in Nazwy
group w by w[0] into g
select new { FirstLetter = g.Key, Words = g };
foreach (var g in wordGroups)
{
Console.WriteLine("\nSłowa, które zaczynają się na literę: '{0}'", g.FirstLetter);
foreach (var w in g.Words)
{
Console.Write("{0} ", w);
}
}
}
public static void Linq_Union1()
{
var uniqueNumbers = Liczby1.Union(Liczby2);
Console.WriteLine("\nUnikalne liczby które są w obu zbiorach:");
foreach (var n in uniqueNumbers)
{
Console.Write("{0} ", n);
}
}
public static void Linq_Intersect1()
{
var commonNumbers = Liczby1.Intersect(Liczby2);
Console.WriteLine("\nLiczby występujące w dwóch zbiorach:");
foreach (var n in commonNumbers)
{
Console.Write("{0} ", n);
}
}
public static void Linq_Except1()
{
IEnumerable aOnlyNumbers = Liczby1.Except(Liczby2);
Console.WriteLine("\nLiczby z pierwszego zbioru, które nie występują w drugim zbiorze:");
foreach (var n in aOnlyNumbers)
{
Console.Write("{0} ", n);
}
}
public static void Linq_ToDictionary1()
{
var pisarze = new[] { new {Autor = "Pynchon", IloscKsiazek = 6},
new {Autor = "London" , IloscKsiazek = 15},
new {Autor = "Beckett", IloscKsiazek = 17}
};
var pisarzeDict = pisarze.ToDictionary(sr => sr.Autor);
Console.WriteLine("\nKonwersja przy użyciu ToDictionary():");
Console.Write(pisarzeDict["London"]);
}
public static void Linq_Join1()
{
var liczby = from n1 in Liczby1
join n2 in Liczby2 on n1 equals n2
select n1;
Console.WriteLine("\nBardzo prosty przykład z join:");
foreach (var liczba in liczby)
{
Console.Write("{0} ", liczba);
}
}
static void Main(string[] args)
{
Linq_Where1();
Linq_Where2();
Linq_WhereAnonymous();
Linq_DoubleFrom();
Linq_Take1(); //inne podobne operatory: Skip, Take, TakeWhile, SkipWhile
Linq_Orderby1();
Linq_Group1();
Linq_Group2();
Linq_Union1();
Linq_Intersect1();
Linq_Except1();
Linq_ToDictionary1(); //inne podobne operatory: To array, To list
Linq_Join1();
}
}
}