Linq - concatenazione di condizioni

di Anonimizzato23796 il
3 risposte
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

  • 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.
  • 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
  • Uhm, po' esse. Appena posso ci riprovo, grazie. So proprio pollo :S
Devi accedere o registrarti per scrivere nel forum
3 risposte