Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549

    [VB.NET] Acquisizione dati con LINQ e manipolare lista oggetti in memoria

    salve a tutti
    devo fare molteplici operazioni su una tabella di database
    per non soffocare il DB di chiamate ho deciso di mettere tutto in memoria e fare le operazioni.

    codice:
         var t2 = from a in db.T_Esami.AsNoTracking()                             where a.Data >= _dt1 && a.Data <= _dt2
                                 select a;
    ho notato che usando un datatable (si framework 2.0) comunque devo create un datatable e aggiungere a mano tutte le colonne.
    codice:
       DataTable DT;                DT = new DataTable("TEmpEsami");
    
    DT = (from a in db.T_Esami.AsNoTracking()
                    where a.Data >= _dt1 && a.Data <= _dt2
                       select a).ToDataTable();
    mentre invece anche dichiarando un oggetto, dovrei comunque impostare le property
    codice:
    var Esami = t2.ToList();

    essendo che ho poco tempo per ricreare il datatable, o per crearmi un oggetto al volo con tutte le property precise, esiste un modo per avere un oggetto in memoria già pronto da usare con LINQ? e successivamente filtrare?
    in modo che faccio una sola query al DB e le successive in memoria
    infatti se faccio:
    codice:
       var ListaMese = (from x in t2
                                             where
                                              x.studente='prova'     select x);
    //t2 è già la lista filtrata precedentemente
    comunque va ad interrogare nuovamente il DB! ciò che comunque alla fine sarebbero troppe query


    grazie
    Ultima modifica di Kahm; 30-10-2017 a 16:29
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    E' sufficiente che tu esegua il metodo ToList() applicandolo a una espressione LINQ che sia meno restrittiva di quella finale, cioè che includa tutti gli elementi validi per i filtri che applicherai, ma che non sia troppo "larga" da caricare in memoria dal DB una quantità esagerata di dati.

    Nel tuo caso, potresti individuare la data minima del filtro e la data massima, filtrando i record con quei limiti.

    Quando esegui ToList(), l'espressione viene valutata, la query sul DB eseguita e ti vengono restituiti degli oggetti.

    Puoi applicare le successive espressioni LINQ agli oggetti ottenuti, poiché in quel caso starai utilizzando LINQ 2 Objects e quindi non andrai a eseguire nuove query sul DB, ma filtrerai direttamente gli oggetti in memoria.

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

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    Quote Originariamente inviata da alka Visualizza il messaggio
    E' sufficiente che tu esegua il metodo ToList() applicandolo a una espressione LINQ che sia meno restrittiva di quella finale, cioè che includa tutti gli elementi validi per i filtri che applicherai, ma che non sia troppo "larga" da caricare in memoria dal DB una quantità esagerata di dati.

    Nel tuo caso, potresti individuare la data minima del filtro e la data massima, filtrando i record con quei limiti.

    Quando esegui ToList(), l'espressione viene valutata, la query sul DB eseguita e ti vengono restituiti degli oggetti.

    Puoi applicare le successive espressioni LINQ agli oggetti ottenuti, poiché in quel caso starai utilizzando LINQ 2 Objects e quindi non andrai a eseguire nuove query sul DB, ma filtrerai direttamente gli oggetti in memoria.

    Ciao!
    beh provando questo codice: varEsami= t2.ToList();
    da errore in quanto la property Esami non contiene i campi (...lista dei campi)
    o forse ho emesso qualcosa?
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    beh provando questo codice: varEsami= t2.ToList();
    da errore in quanto la property Esami non contiene i campi (...lista dei campi)
    o forse ho emesso qualcosa?
    Se esegui ToList(), quello che ottieni è una lista degli oggetti che soddisfano l'espressione definita tramite la sintassi LINQ.
    Esami non è una property, bensì una variabile (nel codice che hai specificato).

    Non so qual è l'errore a cui ti riferisci, dato che non l'hai scritto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,549
    Quote Originariamente inviata da alka Visualizza il messaggio
    Se esegui ToList(), quello che ottieni è una lista degli oggetti che soddisfano l'espressione definita tramite la sintassi LINQ.
    Esami non è una property, bensì una variabile (nel codice che hai specificato).

    Non so qual è l'errore a cui ti riferisci, dato che non l'hai scritto.
    si tutto ok scusa
    dava errore la mia entity

    cmq grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.