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 

Responder a