Mostrando entradas con la etiqueta linq. Mostrar todas las entradas
Mostrando entradas con la etiqueta linq. Mostrar todas las entradas

martes, 29 de abril de 2014

Error "El código de usuario no controló EntityCommandExecutionException" usando EntityFrameWork y linq

Si estamos en modo de depuración desde el IDE tendremos una ventana como ésta:

Lo primero es identificar la excepción de forma correcta. Para ello le damos a Ver detalle...

Y una vez dentro del detalle desplegamos la Excepción para consultar la propiedad "InnerExcepcion" que es la excepcion interna y nos devuelve mas información.



La ventana donde veremos la excepion interna tiene esta apariencia:

En nuestro ejemplo estamos trabajando con sentencias linq y lo que sucede es que tardan "demasiado tiempo" por el volumen de datos manejado y como medida de protección el tiempo de duración está limitado para evitar problemas de estabilidad en el sistema.
Si queremos permitirlo debemos de establecer el siguiente comando sobre nuestro objecto del contexto (llamado en este ejemplo Micontext)

((System.Data.Entity.Infrastructure.IObjectContextAdapter) Micontext).ObjectContext.CommandTimeout

de modo que el código quedaría algo así ....

cloudEntities Micontext= new cloudEntities();
((System.Data.Entity.Infrastructure.IObjectContextAdapter) Micontext).ObjectContext.CommandTimeout = 0;

var Consulta = from g in Micontext.MiTabla
               select new{g.campo1, g.campo2}

Comando extraido de la fuente:
http://stackoverflow.com/questions/11747368/set-command-timeout-in-entity-framework-4-3

lunes, 28 de abril de 2014

Consulta condicional en el Where LinQ c#

Desarrollando una aplicacion en ASP.NET con c# y LinQ tenía que devolver una consulta con las ventas en un rango de fechas determinado y poder filtrar por las ventas en ese rango para un articulo en concreto exclusivamente. La información se mostraría filtrada o no por artículo atendiendo a si se rellenaba un control de tipo TextBox con el codigo del articulo que quisieramos filtrar.

¿Como hacemos eso?

Pues bien la sintaxis para conseguirlo es con un "if" dentro del Where

de modo que se escribiría así:

from g in cloudModel.lineasTickets
join f in cloudModel.articulos on g.codigoBarras equals f.codigoBarras
where g.fecha >= Calendar1.SelectedDate && g.fecha <= Calendar2.SelectedDate
&& (txtDesdeArticulo.Text != "" ? f.codigo == txtDesdeArticulo.Text : 1 == 1) 

Se indica que si el control tiene datos filtre el campo codigo por el valor escrito y en otro caso 1=1 es como decir no hagas nada. Una condicion siempre true. 

Espero que os ayude. Xiaoo

jueves, 24 de abril de 2014

como filtrar en el Where de una consulta Linq c# entre 2 fechas

Estaba intentando realizar una consulta que me devolviese las ventas de una fecha concreto y para ello necesitaba filtrar los datos de la tabla entre dichas fechas. Si utilizaba la sintaxis: DateTime.Now.AddDays( 7)  el compilador me lanzaba un error indicando:

LINQ to Entities no reconoce el método 'System.DateTime AddDays(Double)' del método, y este método no se puede traducir en una expresión de almacén.

la solución consiste en cambiar dicha función por: System.Data.Objects.EntityFunctions.AddDays(DateTime.Now, 7)

de modo que el resultado seria algo así:

 var consulta = from g in cloudModel.lineasTickets
                                   where (g.fecha <= DateTime.Now && g.fecha >= System.Data.Objects.EntityFunctions.AddDays(DateTime.Now, -15))

en lugar de

 var consulta = from g in cloudModel.lineasTickets
                                   where (g.fecha <= DateTime.Now && g.fecha >= DateTime.Now.AddDays(-15))

Fuente: http://social.msdn.microsoft.com/Forums/en-US/78079cf0-7b77-4e8a-abc0-b47538caac19/adding-days-to-datetime-field-inside-linq-where-clause?forum=linqtosql

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...