AH perfecto, sale así entonces, es justo lo que necesito.

 

Muchas gracias

Eugenio

 

  _____  

De: [email protected] [mailto:[email protected]] En nombre de Duhalde
Martín
Enviado el: Miércoles, 12 de Mayo de 2010 12:24 p.m.
Para: [email protected]
Asunto: [puntonet] Linq

 

No, la primer consulta hace un Select (*) pero no realiza la petición al
servidor. No trae toda la tabla.

Luego, cada consulta es concatenada

            Consulta=Consulta.Where(..)

Es como agregar al select los Ands (de hecho es lo que hace)

 

Una ves que esta toda la consulta construida se hace por ejemplo

 

retunr consulta.ToList();

                         

 

Es ahí donde se arma todo el query y se envía al SQL, trayendo solo los
resultados filtrados. (como concatenar el query a mano y ejecutarlo de una,
pero no harcodeas ningún string)

 

Inclusive yo hago 

 

return Paginado.Paginar<Entidad>(Pagina, consulta);

 

donde me hace el Take y Skip y me devuelve solo los N elementos de la página
actual. Es bastante eficiente y por su simplicidad es muy feliz.

 

 

 

 

  _____  

De: [email protected] [mailto:[email protected]] En nombre de Eugenio
Alonso
Enviado el: Miércoles, 12 de Mayo de 2010 11:26 a.m.
Para: [email protected]
Asunto: [puntonet] Linq

 

Es bastante práctica.

 

Está bueno cuando son pocos datos esta opción, porque en la primer consulta
en ese caso estas abriendo toda la tabla y después aplicas los filtros
localmente??

 

Linq lo maneja así, o tiene algún tipo de optimización para no traer todos
registros en este caso ??

 

Gracias Eugenio

 

  _____  

De: [email protected] [mailto:[email protected]] En nombre de Duhalde
Martín
Enviado el: Miércoles, 12 de Mayo de 2010 10:03 a.m.
Para: [email protected]
Asunto: [puntonet] Linq

 

Eugenio: yo hago algo así que es re simple

 

var consulta = bd.GetTable<Entidad>().Select(c => c);

 

if (condición de bousqueda 1 != nula)

consulta = consulta.Where(c => condición);

 

if (condición de bousqueda 2 != nula)

consulta = consulta.Where(c => condición);

 

… etc

 

 

Ejemplo:

 

 

  public List<ConsultaResumenGuia> GuiasObtenerPorFlitro(

IEntidadContextoDeUsuario contextoDeUsuario, Paginado Pagina, FiltrosGuia
filtroGuia, bool traerDetalleElementos)

        {

 

            List<ConsultaResumenGuia> retval = new
List<ConsultaResumenGuia>();

            List<EntidadGuia> lista;

 

            List<EntidadExpedientePorFiscalizacion> datosFiscalizaciones =
null;

 

            using (ContextoDeDatosDeDeposito bd = new
ContextoDeDatosDeDeposito { DeferredLoadingEnabled = false })

            {

                #region DataLoadOptions

 

                bd.LoadOptions = GenerarDataLoadOptionsParaGuias();

 

                #endregion

 

                var consulta = bd.GetTable<EntidadGuia>().Select(c => c);

 

                #region Filtro de Guias

 

                FiltrosGuia filtroG = filtroGuia;//.Value;

 

                #region Filtro Fechas

 

                if (filtroG.FechaDesde.HasValue)

                    filtroG.FechaDesde = new
DateTime(filtroG.FechaDesde.Value.Year, filtroG.FechaDesde.Value.Month,
filtroG.FechaDesde.Value.Day);

                if (filtroG.FechaHasta.HasValue)

                    filtroG.FechaHasta = new
DateTime(filtroG.FechaHasta.Value.Year, filtroG.FechaHasta.Value.Month,
filtroG.FechaHasta.Value.Day, 23, 59, 59);

 

                if (filtroG.FechaDesde.HasValue)

                    consulta = consulta.Where(c => c.Fecha >=
filtroG.FechaDesde.Value);

 

                if (filtroG.FechaHasta.HasValue)

                    consulta = consulta.Where(c => c.Fecha <=
filtroG.FechaHasta.Value);

 

if (filtroG.DocumentoNumero.HasValue)

                    consulta = consulta.Where(c =>
c.RelacionDocumentosVinculados.Any(e => e.Numero ==
filtroG.DocumentoNumero));

                if (filtroG.DocumentoAno.HasValue)

                    consulta = consulta.Where(c =>
c.RelacionDocumentosVinculados.Any(e => e.Ano == filtroG.DocumentoAno));

 

 

  _____  

De: [email protected] [mailto:[email protected]] En nombre de Eugenio
Alonso
Enviado el: Martes, 11 de Mayo de 2010 09:27 p.m.
Para: [email protected]
Asunto: [puntonet] Linq

 

Hola a todos

 

Estoy desarrollando un nuevo proyecto con Linq y no encontré la forma de
crear una consulta con filtros dinámicos de acuerdo a cierta selección que
haga el usuario. 

 

Por ejemplo, tengo una página con varios checkbox, y de acuerdo a la
selección que haga el usuario en estos check, la consulta aplica o no los
filtros. 

 

Antes era bastante simple la operatoria, en el stringSql que armaba
concatenaba o no los filtros según correspondiera.

 

Para hacer algo así con Linq como debería ser la operatoria?

 

 

Saludos y gracias

Eugenio

 

 


  _____  

E-mail clasificado por el Identificador de Spam Inteligente de Terra. Para
modificar la categoría clasificada acceda a su webmail. 


  _____  

Este mensaje ha sido verificado por el E-mail Protegido.
Antivirus actualizado en 12/05/2010 / Versión: 0.96/10985 


  _____  

E-mail clasificado por el Identificador de Spam Inteligente de Terra. Para
modificar la categoría clasificada acceda a su webmail. 


  _____  

Este mensaje ha sido verificado por el E-mail Protegido.
Antivirus actualizado en 12/05/2010 / Versión: 0.96/10989 

Responder a