Studiare la documentazione è senz' altro un buon consiglio!
Mi sembra che tu abbia delle perplessità sulla sintassi (vedi domanda sul Where).
Intanto bisogna cominciare a dire che per il LINQ esistono due sintassi:
La prima è quella nativa basata su caratteristiche del linguaggio:
var result = ordini.Where(o => o.Id == 1);
la seconda è più simile alle query SQL, non sembra C#, e si chiama
Query Syntax:
var result = from o in ordini where o.Id == 1 select o;
Tieni presente che quando il compilatore incontra la seconda la converte nella prima. L' uso della seconda forma ha delle limitazioni.
Ora veniamo alla tua domanda 'da dove salta fuori Where?' È vero che la classe List NON ha il metodo Where, ma quando fai, using System.Linq, ti porti dentro una serie di 'Extension Methods' che aggiungono nuovi metodi alla classe List.
Per quanto riguarda la domanda 'cosa è la freccia', la risposta è, si tratta dell' operatore di una 'Lambda Expression' (nome inquietante ) , si tratta di una sintassi particolare per descrivere un metodo anonimo (che poi è un delegato).
Quindi riassumendo, in 'ordini.Where(o => 0.Id == 1)', Where è un extension method che vuole come parametro un delegato, in pratica la Where richiamerà il delegato per valutare la condizione. Una roba del genere:
bool MyCondition(Ordine o)
{
return o.Id == 1;
}
var result = ordini.Where(MyCondition);
Nota che questo esempio è corretto e si compila, è la stessa cosa del tuo esempio senza la lambda expression.