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