Linq - concatenazione di condizioni

di il
3 risposte

Linq - concatenazione di condizioni

Allora, questo codice funziona e mi permette abbastanza facilmente di eseguire delle ricerche avendo dei parametri di diverso tipo (nel caso in esempio id e numeroInventario)
        private List<Table> get(long? id, long? numeroInventario)
        {
            var ctx = new DB();
            List<Table> numQuery2 = new List<Table>();

            String query = "SELECT * FROM TableWHERE idOrigine is null ";
            if (id!= null)
                query += " AND id= " + id;
            if (numeroInventario != null)
                query += " AND numeroInventario = " + numeroInventario;

            return ctx.Table.SqlQuery(query).ToList();

        }
Il mio problema è che vorrei usar meglio le potenzialità (o almeno la sintassi ) di linq e allora ho scritto questo codice
        private List<Table> get(long? id, long? numeroInventario)
        {
            var ctx = new DB();

            List<Table> result = new List<Table>();
            IQueryable<Table> numQuery2 = ctx.Table.Where(a => a.idOrigine == null);
            if (id!= null)
                numQuery2.Where(a => a.id== id);
            if (numeroInventario != null)
                numQuery2.Where(a => a.numeroInventario == numeroInventario);

            result = numQuery2.ToList();
            return result;
        }

Compila senza errori neanche a runtime, il problema, non del tutto irrilevante, è che non funziona :S

Mi resituisce sempre tutta la lista senza filtrarla. Mi viene da pensare che non gli piaccia che vi siano due (o più) where.

Avete idea di come si faccia?

3 Risposte

  • Re: Linq - concatenazione di condizioni

    Ho trovato questo codice che funziona
            private List<Table> getCespiti2(long? id, long? numeroInventario)
            {
                var ctx = new DB();
                ctx.Configuration.LazyLoadingEnabled = false;
                List<Table> result = new List<Table>();
                var q1 = ctx.Table.Where(a => a.idOrigine == null);
                var q2 = q1;
                
                if (id!= null)
                    q2 = q1.Where(a => a.id== id);
                var q3 = q2;
                if (numeroInventario != null)
                    q3 = q2.Where(a => a.numeroInventario == numeroInventario);
                result = q3.ToList();
    
                return result;
            }
    però... che merda, boh.

    Mi sa che lascio il mio con la query old stype. Il fascino vintage dell'sql non si batte.

    Se qualcuno conosce una soluzione più elegante, vi prego di condividerla.
  • Re: Linq - concatenazione di condizioni

    Ciao

    una rapida considerazione ...

    mi sembra che tu abbia dimenticato un piccolo dettaglio ...

    [codice originale]

    if (id!= null)
    numQuery2.Where(a => a.id== id);
    if (numeroInventario != null)
    numQuery2.Where(a => a.numeroInventario == numeroInventario);

    [codice modificato]

    if (id!= null)
    numQuery2 = numQuery2.Where(a => a.id== id);

    if (numeroInventario != null)
    numQuery2 = numQuery2.Where(a => a.numeroInventario == numeroInventario);

    ciao
  • Re: Linq - concatenazione di condizioni

    Uhm, po' esse. Appena posso ci riprovo, grazie. So proprio pollo :S
Devi accedere o registrarti per scrivere nel forum
3 risposte