LINK UPITI I LAMBDA IZRAZI U C#

LINQ (Language Integrated Query) je moćan alat u .NET frameworku koji omogućava upit i manipulaciju podacima iz različitih izvora koristeći isti jezik upita, direktno unutar C# (ili drugih .NET jezika). LINQ pojednostavljuje rad sa podacima, bilo da su oni u memoriji, u bazi podataka, u XML dokumentima ili negde drugde.

Ključne karakteristike LINQ-a:

Osnovne Komponente LINQ-a:

Primeri LINQ Upita:

1. LINQ to Objects (U memoriji)

using System; using System.Collections.Generic; using System.Linq; public class Program
{
public static void Main()
{
// Lista putnika
List putnici = new List
{
new Putnik("Ana", "Petrović", "online"),
new Putnik("Marko", "Jovanović", "šalter"),
new Putnik("Ivana", "Nikolić", "online"),
new Putnik("Petar", "Savić", "online")
};

// LINQ upit za filtriranje i sortiranje
var onlinePutnici = putnici
.Where(p => p.NacinKupovine == "online" && p.Rezervacija)
.OrderByDescending(p => p.Ime);

// Ispis rezultata
foreach (var p in onlinePutnici)
{
Console.WriteLine(p.ToString());
}
}
}
Opis:
Ovaj kod prikazuje jednostavan primer korišćenja LINQ (Language Integrated Query) u C#. Cilj koda je filtriranje i sortiranje liste putnika na osnovu određenih kriterijuma.
Prvo je kreirana klasa koja opisuje neki objekat koji predstavlja putnika u vozu.
public class Putnik
{
public string Ime { get; set; }
public string Prezime { get; set; }
public string NacinKupovine { get; set; }
public bool Rezervacija { get; set; }

public Putnik(string ime, string prezime, string nacinKupovine)
{
Ime = ime;
Prezime = prezime;
NacinKupovine = nacinKupovine;
Rezervacija = true; // Pretpostavimo da su svi putnici izvršili rezervaciju
}

public override string ToString()
{
return $"{Ime} {Prezime}, {NacinKupovine}";
}
}
Ova klasa Putnik ima četiri svojstva:
Zatim se u nastavku, vrši definisanje i popunjavanje liste putnici.
Ova lista "putnici" sadrži četiri objekta tipa Putnik, svaki sa različitim imenom, prezimenom i načinom kupovine.

LINQ upit za filtriranje i sortiranje:

I na kraju tu je i forech petlja za prolaz kroz listu putnika u svakom ciklusu. Ovaj deo koda prolazi kroz sve putnike koji su filtrirani i sortirani, te ispisuje njihove podatke (ime, prezime i način kupovine).
Ovaj primer pokazuje kako možete koristiti LINQ da biste filtrirali i sortirali kolekciju objekata u C#. Konkretno, iz liste putnika se izdvajaju oni koji su kupili kartu online i sortiraju po imenu u opadajućem redosledu.

LINQ to SQL (U bazi podataka)

using System;
using System.Linq;
using System.Data.Linq;

public class Program
{

public static void Main()
{
using (var context = new MyDataContext())
{
var putnici = from p in context.Putnici
where p.NacinKupovine == "online"
select p;

foreach (var p in putnici)
{
Console.WriteLine($"{p.Ime} {p.Prezime}");
}
}
}
}

Objašnjenje primera

​
using System;
using System.Linq;
using System.Data.Linq;

​Definisanje klase Program i glavne metode Main
public class Program
{
public static void Main()
{
// Kod unutar metode
}
}

Kreiranje i korišćenje DataContext-a

using (var context = new MyDataContext())
{
// Operacije nad bazom podataka
}

Napomena: Potrebno je da klasa MyDataContext bude prethodno definisana i konfigurisana sa ispravnim konekcionim stringom koji povezuje na odgovarajuću bazu podataka.

Definisanje LINQ upita

var putnici = from p in context.Putnici
where p.NacinKupovine == "online"
select p;
Ovaj segment koda definiše LINQ upit koji:
Važno: Ovaj upit je odloženog izvršavanja (deferred execution), što znači da se ne izvršava odmah kada je definisan, već tek kada se iterira kroz rezultate ili pozove metoda koja forsira izvršenje (npr. ToList()).

Izvršavanje upita i ispis rezultata

foreach (var p in putnici)
{
Console.WriteLine($"{p.Ime} {p.Prezime}");
}

Celokupan kod sa dodatnim objašnjenjima

using System;
using System.Linq;
using System.Data.Linq;
using System.Data.Linq.Mapping;

// Definisanje entiteta Putnik
[Table(Name = "Putnici")]
public class Putnik
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int Id { get; set; }

[Column]
public string Ime { get; set; }

[Column]
public string Prezime { get; set; }

[Column]
public string NacinKupovine { get; set; }
}

// Definisanje DataContext-a
public class MyDataContext : DataContext
{
public Table Putnici;

public MyDataContext() : base("YourConnectionStringHere")
{

}
}

public class Program
{
public static void Main()
{
using (var context = new MyDataContext())
{
var putnici = from p in context.Putnici
where p.NacinKupovine == "online"
select p;

foreach (var p in putnici)
{
Console.WriteLine($"{p.Ime} {p.Prezime}");
}
}
}
}
Ovaj primer demonstrira kako koristiti LINQ to SQL za jednostavno i efikasno pristupanje i manipulisanje podacima iz relacione baze podataka koristeći C# i objektno orijentisani pristup. LINQ to SQL omogućava da pišete upite na intuitivan način, koristeći sintaksu C# jezika, bez potrebe za pisanjem sirovih SQL upita.
Prednosti korišćenja LINQ to SQL:
Napomena: LINQ to SQL je pogodan za manje i srednje velike aplikacije. Za složenije scenarije i baze podataka preporučuje se korišćenje ORM alata poput Entity Framework-a koji pruža više mogućnosti i fleksibilnosti.

Komponente LINQ Upita:

Zaključak

​LINQ olakšava rad sa podacima, čini kod čitljivijim i omogućava rad sa različitim vrstama podataka koristeći istu sintaksu. Omogućava elegantan način za filtriranje, sortiranje i manipulaciju podacima u .NET aplikacijama.

Lambda izrazi

Lambda izrazi su ključni deo modernih jezika programiranja kao što je C# i omogućavaju da sevpišu inline, anonimne funkcije. U suštini, lambda izrazi omogućavaju definisanje metoda bez potrebe za kreiranjem zasebnih metoda ili klasa.

Ključne Karakteristike Lambda Izraza:

Sintaksa Lambda Izraza:

Lambda izrazi koriste => operator, koji se naziva "lambda operator". Sintaksa je sledeća:
(parameters) => expression
Ili za složenije izraze:
(parameters) => { statement1; statement2; }

Primeri Lambda Izraza:

1. Jednostavan Lambda Izraz:

// Definiše lambda izraz koji dodaje 10 na dati broj
Func addTen = x => x + 10;

int result = addTen(5); // result = 15

2. Lambda Izraz u LINQ Upitu:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
public static void Main()
{
List numbers = new List { 1, 2, 3, 4, 5 };

// Koristi lambda izraz za filtriranje brojeva koji su veći od 3
var filteredNumbers = numbers.Where(n => n > 3);

foreach (var number in filteredNumbers)
{
Console.WriteLine(number); // Ispisuje 4 i 5
}
}
}

Ovaj kod demonstrira kako koristiti lambda izraz u kombinaciji sa metodom Where iz LINQ-a kako bi se filtrirali elementi liste koji zadovoljavaju određeni uslov. Konkretno, u ovom primeru, filtriraju se brojevi koji su veći od 3.
Ovde se dalje U nastavku je dat lambda izraz
var filteredNumbers = numbers.Where(n => n > 3);
numbers.Where(n => n > 3):

3. Lambda Izraz sa Višestrukim Parametrima:

// Lambda izraz za sabiranje dva broja
Func add = (a, b) => a + b;

int sum = add(3, 4); // sum = 7

Ovaj pristup je fleksibilan i omogućava definisanje funkcija u hodu, bez potrebe za eksplicitnim pisanjem metoda.

​Upotreba Lambda Izraza:

Zaključak

​Lambda izrazi su moćan alat u C# koji omogućava pisanje kompaktnih i čitljivih funkcija. Oni su posebno korisni za rad sa kolekcijama i funkcionalnim stilom programiranja, kao i za izrađivanje inline metoda bez potrebe za kreiranjem zasebnih metoda.