+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: convertire ciclo con linq

  1. #1
    Post
    30

    convertire ciclo con linq

    Salve a tutti, sto cercando di convertire un ciclo che appesantisce molto l'elaborazione con una stringa linq.

    Il ciclo è:
    codice:
                   foreach (var asta in Globale.Aste)
                        {
                            if (asta.Value.Index == i + 1)
                            {
                                AsteDaLeggere = asta.Key;
                                break;
                            }
                        }
    vorrei conventirla in una semplice esecuzione linq.
    codice:
    string AsteDaLeggeretemp = (from cust in Globale.Aste where cust.Value.Index == i + 1 select cust).ToString();
    qualcuno riesce a vedere dove sia il problema (il tostring non è quello che cercavo, ma il valore key)?
    La stringa di esecuzione è in errore di sintassi.

    Saluti
    Sebastiano Floridia
    Ultima modifica di AntonioG; 29-09-2017 06:23  Motivo: Usa i tag code per il codice

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,049
    LINQ è solo un altro modo per creare una espressione e migliorare la leggibilità del codice: non è affatto detto che tu ne tragga dei benefici di performance.

    Per come hai scritto l'espressione, devi specificare select cust.Key per "proiettare" il valore della chiave.

    Come predetto, quella che scrivi è solo una espressione, o meglio un oggetto che la rappresenta, quindi se fai il ToString dell'espressione non otterrai il valore che cerchi.

    Devi usare uno dei metodi che consente di eseguire l'espressione e prendere il risultato cercato; ad esempio, ToList() e ToArray() la esegue e crea una lista o array di tutte le chiavi. Se hai bisogno di un risultato solo, usa First() (se sei sicuro che avrai un risultato) oppure FirstOrDefault() (se vuoi il valore predefinito del tipo di dato, quindi null, nel caso in cui non venga trovato alcun elemento che soddisfa il filtro.

    Grossomodo comunque, anche se in LINQ risulta più leggibile, quello che hai scritto non è molto diverso dal ciclo che esegui in termini di prestazioni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    Post
    30
    Grazie tante. con select cust.Key e first() ho risolto.
    Sinceramente, leggendo svariati articoli, avevo consolidato l'idea che la stringa di esecuzione LINQ fosse notevolmente più veloce del semplice ciclo.
    Tieni conto che il ciclo potrebbe contenere anche 3000 elementi che sono inseriti in un altro cicli di 100 elementi.
    Non ho fatto un test ma credevo che con linq fosse molto ma molto più veloce.
    Grazie Tante.

    Sebastiano Floridia

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,049
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Grazie tante. con select cust.Key e first() ho risolto.
    Sinceramente, leggendo svariati articoli, avevo consolidato l'idea che la stringa di esecuzione LINQ fosse notevolmente più veloce del semplice ciclo.
    Tieni conto che il ciclo potrebbe contenere anche 3000 elementi che sono inseriti in un altro cicli di 100 elementi.
    Non ho fatto un test ma credevo che con linq fosse molto ma molto più veloce.
    Grazie Tante.
    Il vantaggio principale di LINQ è la velocità con cui si sviluppa, nel fatto che il filtro è più leggibile (poiché è scritto così come va applicato) ed è tecnicamente applicabile a diverse fonti di dati usando un linguaggio e parole chiavi standard, oltre al fatto che è compilato più tutta una serie correlata di vantaggi.

    Si può però ipotizzare che, sebbene la sua finalità non sia la velocità di esecuzione, il codice della libreria sia stato comunque codificato con una certa cura, e pertanto potrebbe risultare più veloce dei cicli innestati che magari può approntare uno sviluppatore di media esperienza.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  5. #5
    Post
    30
    Grazie!!!
    Chiarissimo.

    Ciao
    Sebastiano Floridia

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi