sql - C# EF6-Lambda Expressions deep big-tree query improvement for efficiency and clean code -
sql - C# EF6-Lambda Expressions deep big-tree query improvement for efficiency and clean code -
hi there fellow coders,
i looking improve next query.
we using ef6 (codefirst) , c# lambda expressions, , repository/unit of work patterns. also, needed restrict query in way inner-query entities query retrieve subset of joined data, , found dynamicselectextensions library extends iqueryable , gives selectincluding statement this.
the querynamespace repositorios { public class canaldecomunicacionrepositorio: efrepositoriodesactivable<canaldecomunicacion>, icanaldecomunicacionrepositorio { public canaldecomunicacionrepositorio(dbcontext context) : base(context) { } public iqueryable<canaldecomunicacion> consultaparalibreria() { homecoming dbset.where(canalcomunicacion=> canalcomunicacion.fechadesactivacion==null) .selectincluding(new list<expression<func<canaldecomunicacion, object>>>() { canalcomunicacion => canalcomunicacion.listacontroladores2.where(controlador=>controlador.fechadesactivacion==null), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listapuertas.where(puerta=>puerta.fechadesactivacion==null)), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listapuertas.select( puerta=>puerta.listalectoras.where(lectora=>lectora.fechadesactivacion==null))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.where(lectora=>lectora.fechadesactivacion==null)), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listaeventosexcluidos.where(eventos=> eventos.fechadesactivacion==null)), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.where(grupolectora=>grupolectora.fechadesactivacion==null && grupolectora.grupoacceso.fechadesactivacion==null))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.where(gpopadre => gpopadre.fechadesactivacion==null)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre.listadegrupoaccesoempleados.where(listemp => listemp.fechadesactivacion==null))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre.listadegrupoaccesoempleados.select(listemp => listemp.persona))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre.listadegrupoaccesoempleados.select(listemp => listemp.persona.listatarjetapersona.where(tarper=>tarper.fechadesactivacion==null)))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre.listadegrupoaccesoempleados.select(listemp => listemp.persona.listatarjetapersona.select(tarper=>tarper.tarjeta)))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegpopadre.select(gpopadre => gpopadre.gpopadre.listadegrupoaccesoempleados.select(listemp => listemp.persona.listatarjetapersona.select(tarper=>tarper.tarjeta.listatipostarjeta.where(ltipo=>ltipo.fechadesactivacion==null))))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadeferiados.where(liferiado=> liferiado.fechadesactivacion==null)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.where(lisempleado=> lisempleado.fechadesactivacion==null)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadeferiados.select(liferiado=> liferiado.feriado)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadehistorialturnosrecurrencia.where(turno=>turno.fechadesactivacion==null)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadehistorialturnosrecurrencia.select(turno=>turno.turno).select(turno=>turno)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadehistorialturnosrecurrencia.select(turno=>turno.turno).select(turno=>turno.listadiashora.where(lista=>lista.fechadesactivacion==null))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadehistorialturnosrecurrencia.select(turno=>turno.turno).select(turno=>turno.listadiashora.select(lista=>lista.dia))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(lisempleado=> lisempleado.persona)))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(grupoempleado=>grupoempleado.listadehistorialturnosrecurrenciaespecial.where(listaturnorecurrencia=> listaturnorecurrencia.fechadesactivacion==null))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(grupoempleado=>grupoempleado.listadehistorialturnosrecurrenciaespecial.select(turno=>turno.turno))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(grupoempleado=>grupoempleado.listadehistorialturnosrecurrenciaespecial.select(turno=>turno.turno.listadiashora.where(lista=>lista.fechadesactivacion==null)))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(grupoempleado=>grupoempleado.listadehistorialturnosrecurrenciaespecial.select(turno=>turno.turno.listadiashora.select(lista=>lista.dia)))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(lisempleado=> lisempleado.persona.listatarjetapersona.where(listarjeta=>listarjeta.fechadesactivacion==null))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(lisempleado=> lisempleado.persona.listatarjetapersona.select(listarjeta=>listarjeta.tarjeta))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listadegruposaccesolectora.select(grupoacceso=>grupoacceso.grupoacceso).select(grupo=>grupo.listadegrupoaccesoempleados.select(lisempleado=> lisempleado.persona.listatarjetapersona.select(listarjeta=>listarjeta.tarjeta.listatipostarjeta.where(list=>list.fechadesactivacion==null)))))), canalcomunicacion => canalcomunicacion.listacontroladores2.select(controlador=>controlador.listalectoras.select(lectoras=>lectoras.listatipostarjeta.where(list=>list.fechadesactivacion==null))) }).asqueryable(); } } }
the query works of right now, slow query, , code pretty ugly , long , nested.
the modelthis info model entities involved in query. can see, need bring together lot of tables , traverse tree info need. (i tried post image need 10 reputation post it.) so, here link it: data model
if need more info please sure allow me know. input greately appreciated, give thanks in advanced.
c# sql entity-framework lambda
Comments
Post a Comment