2009-10-02 11 views

risposta

26

Perché LINQ non è SQL. LINQ è costituito da un numero di metodi di estensione concatenati su IEnumerable<T> (quando si utilizza lo spazio dei nomi System.Linq). La sintassi SQL like è solo un trucco del compilatore per abilitare un po 'di zucchero sintattico sulle catene di tali metodi di query, quindi sembra che tu possa usare le query con un aspetto simile a SQL nei linguaggi .NET. LINQ fondamentalmente non ha nulla a che fare con SQL di per sé ...

+2

+1: buona risposta – Arthur

+0

ok, capisco cosa stai dicendo. Ha più senso ora. Sembrava che quando hanno parlato di LINQ, stessero cercando di sostituire la scrittura scrivendo query SQL sul lato del database con l'uso delle query linq sul lato codice. – Xaisoft

+4

È meglio pensare a LINQ come a un tentativo di supportare * query * nel codice, non nel codice SQL. La stragrande maggioranza di SQL non è supportata, né dovrebbe essere. – dahlbyk

25

Perché per poter utilizzare Intellisense in Visual Studio con LINQ, è necessario conoscere prima le tabelle in modo che l'editor possa offrire al programmatore l'elenco di colonne tra cui scegliere. Se lo fai in modo SQL e prima scegli le colonne, l'editor non può davvero aiutarti perché non sa quali tabelle guardare.

+6

Ricordo una vecchia intervista di Channel 9 con Anders in cui menziona questo. E LINQ è influenzato anche da altri linguaggi di query come XQuery, non solo SQL. –

+1

In realtà - questo è abbastanza ovvio. –

+0

L'unico motivo non può essere intellisense, giusto? – Xaisoft

4

Spesso si cita che il motivo è Intellisense. Perché se si inizia a scrivere

select p. 

il compilatore non può dire quali proprietà per mostrarvi.

ma se si inizia con

from person p select p. 

si sa per cercare le proprietà sull'oggetto persona.

HTH alex

5

Intellisense è spesso citata come una ragione, ma credo che una spiegazione migliore è che Select avviene logicamente al termine del processo di scrittura di query. Per prima cosa configura le tue origini dati, poi filtri e raggruppa, poi, una volta che hai tutto a posto, specifica cosa vuoi ottenere.

1

Mentre altri hanno correttamente affermato che fornire intellisense era parte della ragione che ha influenzato la decisione di Ander, qualcos'altro che deve essere considerato è che LINQ non è solo destinato all'uso con SQL. Essendo una tecnologia molto più comprensiva, LINQ non è mai stato concepito per essere limitato a funzionare come fa SQL.

19

Lasciando da parte IntelliSense, query expression expansion ecc (che sono tutti validi motivi), credo che il modo LINQ abbia molto più senso.

Si si avvia con un'origine dati. Applichi filtri, ordini, ecc. Finisci con una proiezione. In altre parole, la query è scritta nell'ordine logico delle operazioni.

Per dirla in un altro modo: perché mai i progettisti SQL hanno scelto di ordinare query SQL in questo modo?

+4

Infatti! Questa è la vera domanda qui ... – peSHIr

+2

@Jon: Perché tutti i programmatori pensano che SQL sia procedurale! – leppie

4

In realtà, la sintassi di LINQ è più strettamente basata su XQuery che su SQL, e XQuery fa anche in questo modo.

Le ragioni principali sono già state fornite: in C#, VB.NET e in effetti nella maggior parte dei linguaggi di programmazione, l'ambito scorre dall'alto verso il basso e da sinistra a destra, proprio come normalmente si legge. Il modo in cui viene scritto l'SQL, salti di scope intorno: un identificatore ottiene già utilizzato nella parte SELECT della query, ma viene introdotto solo più tardi, nella parte FROM della query. Ecco perché i progettisti di XQuery hanno deciso di girarlo e LINQ segue solo.

Si abbina anche il modello mentale meglio: avete elenco di fonti di dati (FROM), poi a filtrare i dati che ti interessa (WHERE), allora si ordinano questi dati (ORDERBY) e, infine, si sia di progetto in una rappresentazione diversa (SELECT) o partizionare i risultati (GROUP BY). Successivamente, è possibile iniettare i risultati nella query successiva (INTO).

Problemi correlati