119 messaggi dal 10 febbraio 2003
Ciao a tutti, ho 2 perplessità su linq. L'ho utilizzo poco e quindi non sono ferratissimo in proposito.
La prima domanda è questa:
  
    DataTable sottocosto = new DataTable();
        sottocosto = (DataTable) cache["ListaFoto"];


        var results = from Row in sottocosto.AsEnumerable()
                      where Row.Field<string>("DESCRIZIONE").StartsWith("***")
                      select new
                          {
                              COD_ARTICOLO = Row.Field<string>("COD_ARTICOLO"),
                              DESCRIZIONE = Row.Field<string>("DESCRIZIONE"),
                          };


        homeSottocosto.DataSource = results;
        homeSottocosto.DataBind();

Secondo voi, questa procedura è corretta oppure è meglio utilizzare una connessione al db per ottenere lo stesso elenco?

l'altra domanda è questa: prendendo in esame il caso che io voglia ottenere solo righe che non iniziano per "***", "* " e "# ", come dovrei fare per fare in modo che funzioni? Ho provato così:
EnumerableRowCollection<DataRow> lista = form n in dw.AsEnumerable() where !n.Field<string>("Descrizione").StartWith("***") || !n.Field<string>("Descrizione").StartWith("# ") || !n.Field<string>("Descrizione").StartWith("* ") select n;

Non ottengo il filtraggio.

Grazie anticipatamente.

joshi
11.886 messaggi dal 09 febbraio 2002
Contributi
gionapper ha scritto:

Secondo voi, questa procedura è corretta oppure è meglio utilizzare una connessione al db per ottenere lo stesso elenco?


Sì, secondo me è corretto. Presumo che i "prodotti in sottocosto" siano identici per tutti gli utenti che accedono all'homepage, quindi perché accedere al db per mostrare dati che sono sempre uguali per tutti?

Devi soltanto lasciar scadere la tua cache quando un nuovo prodotto sottocosto viene aggiunto al database, così che la cache possa essere rigenerata con dati aggiornati.

Cambierei solo questo pezzetto di codice:
DataTable sottocosto = new DataTable();
sottocosto = (DataTable) cache["ListaFoto"];
in
DataTable sottocosto = cache["ListaFoto"] as DataTable;
if (sottocosto == null){
  //non so come funziona il tuo meccanismo di caching, ma se qui
  //la variabile sottocosto dovesse esser vuota, puoi andare al
  //db a recuperare i dati
}
...e magari metterei in cache anche il "results", così da non doverlo ricalcolare ad ogni richiesta di pagina.

gionapper ha scritto:

l'altra domanda è questa: prendendo in esame il caso che io voglia ottenere solo righe che non iniziano per "***", "* " e "# ", come dovrei fare per fare in modo che funzioni?

La soluzione è nella tua domanda :) Hai detto "E", quindi devi mettere le tre espressioni in AND.

EnumerableRowCollection<DataRow> lista = form n in dw.AsEnumerable() where !n.Field<string>("Descrizione").StartWith("***") && !n.Field<string>("Descrizione").StartWith("# ") && !n.Field<string>("Descrizione").StartWith("* ") select n;


ciao
Modificato da BrightSoul il 25 novembre 2011 21.12 -

Enjoy learning and just keep making
119 messaggi dal 10 febbraio 2003
Ti ringrazio innazitutto per la chiarezza delle tue risposte.
Per quanti riguarda
Cambierei solo questo pezzetto di codice:

DataTable sottocosto = new DataTable();
sottocosto = (DataTable) cache["ListaFoto"];

in

DataTable sottocosto = cache["ListaFoto"] as DataTable;
if (sottocosto == null){
  //non so come funziona il tuo meccanismo di caching, ma se qui
  //la variabile sottocosto dovesse esser vuota, puoi andare al
  //db a recuperare i dati
}

Diciamo che la cache è monitorata sulla data di creazione del db, che ogni giorno viene ricreato e uppato e che non può essere mai null (almeno per ora questa situazione non è possibile.
Sì, secondo me è corretto. Presumo che i "prodotti in sottocosto" siano identici per tutti gli utenti che accedono all'homepage, quindi perché accedere al db per mostrare dati che sono sempre uguali per tutti?...
...e magari metterei in cache anche il "results", così da non doverlo ricalcolare ad ogni richiesta di pagina.

Gli articoli sono uguali per tutti gli utenti. L'idea di mettere in cache il results, non è male.
Sulla tua seconda risposta, devo dire che hai perfettamente ragione...l'ho anche scritto!!! Lunedì provo, vediamo un po che succede.
Ti ringrazio e ti auguro un buon fine settimana.
Ciao

joshi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.