LINQ – Language Integreted Query – sau cum imi place mie sa-i zic SQL de C#, este un feature aparut ulterior in C# (.NET Framework 3.5 pentru cunoscatori), care a prins la public deoarece este usor de folosit si salveaza multe linii de cod. Nu la toate interviurile primesti probleme legate de el, dar am observat in multe proiecte ca este folosit.
Probleme la interviu
static void Main(string[] args)
{
string[] names = new string[] { "Steven", "James", "Yan" };
var selectedName = (from name in names
where name[4].Equals('e')
select name);
foreach (var item in selectedName)
{
Console.WriteLine(item);
}
}
Pentru Steven, pe pozitia 4 din string se afla e, la James pe pozitia respectiva este s, iar la Yan nu avem aceasta pozitie, deci se arunca exceptie. Ideea care e, intrucat codul se executa in momentul iteratiei, Steven se va afisa, James nu se va afisa si pe urma va fi aruncata exceptia.
Dar daca la interogarea de LINQ aveam si ToList()? In momentul in care se apeleaza ToList, se face si iterarea colectiei, deci se va arunca exceptie, fara sa se mai ajunga in foreach. Pai si probabil te intrebi, daca nu apelam ToList, atunci variabila selectedNames ce tip are. Ia cauta tu pe Google IQueryable.
int[] resultNumbers = { 2, 2, 3, 5, 5,5 };
var distinctNumbers = resultNumbers.Distinct();
foreach (var f in distinctNumbers)
{
Console.WriteLine(f);
}
from c in Cars
join cd in CarsDetails on cd.CarId equals c.CarId into cdl
from cd in cdl.DefaultIfEmpty()
select new {c,cd};
Ce vreau sa retii despre LINQ e ca iti face viata usoara, poti sa scrii selecturi pentru sql direct din codul C# (folosind EntityFramework) si astfel eviti o gramada de probleme destul de des intalnite precum SQL Injection si interogari harcodate in stringuri. De asemenea, mereu cand ai colectii te ajuta. Asa ca baga la cap pentru ca iti trebuie super des.
PS: Prima problema am primit-o de la rusii aia disperati sa angajeze, care au departamentul de HR plin de fete dragute.