none
Como escribir consulta SQL en linq ? RRS feed

  • Pregunta

  • Hola ...

    Nesecito actualizar un registro en DB con sentencia linq, pero no se escribir la sentencia en SQL seria algo asi

    UPDATE CLIENTE SET FechaActivacionPrueba = @Fecha , EstatusActivacionPrueba = @Estatus

    WHERE Email = @Email AND FechaEnvioNotificacion = @FechaEnvio

    escribi esto pero me falta la sentencia LINQ

          
     [HttpGet]
            [AllowAnonymous]
            public IHttpActionResult TestActivate (string email , string fecha )
            {
                Uri uri = new Uri("");
                fecha = fecha.Replace("%", " ");
                fecha = Funcion.DecodeBase64(fecha);
                DateTime FechaRegistroPrueba = Convert.ToDateTime(fecha);
                Cliente client = new Cliente()
                {
                  FechaActivacionPrueba = DateTime.UtcNow,
                  EstatusEnvioNotificacion = true,
    
                };
                using (Context)
                {
                    Context.Cliente.Where(d => d.Email == email ).First();
                    Context.Cliente.Add(client);
                    Context.SaveChanges();
                };
    
                return Redirect(uri);
            }
    
    
    



    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    martes, 9 de julio de 2019 10:39

Respuestas

  • Nesecito actualizar un registro en DB con sentencia linq,

    En resumidas cuentas: no se puede. LINQ es de "solo-lectura". Únicamente permite escribir consultas SELECT, pero no se puede escribir en LINQ nada que modifique la base de datos.

    Si estás usando LINQ-to-Entities, eso indicaría que por debajo de LINQ tienes configurado Entity Framework. Con Entity Framework (EF) sí que se puede hacer el UPDATE, pero requiere "saltarse" LINQ. Hay al menos dos formas de hacerlo:

    La primera es usar LINQ para enviar una SELECT que se traiga todos los registros que cumplen la condición del WHERE. Después se recorren los resultados con un bucle cambiando en cada objeto las propiedades deseadas. Eso cambia el valor en EF, pero nótese que llegados a este punto ya no estamos usando LINQ. Después se llama a .SaveChanges, y con eso EF envía los cambios al servidor (y no usa LINQ para ello). Esto funciona, pero es poco eficiente porque EF genera un UPDATE por cada registro, en lugar de un único UPDATE que cambie todo de golpe en el servidor.

    Otra alternativa, suponiendo que tengas una versión moderna de EF, es usar el método .ExecuteSql para enviar directamente la sentencia SQL tal como la tienes escrita en lenguaje SQL. Esto es eficiente, pero está sujeto a las mismas limitaciones que si enviases la sentencia directamente con ADO.NET. En particular, la sintaxis no se valida en tiempo de compilación, sino que solo se valida en el servidor de base de datos en tiempo de ejecución.

    martes, 9 de julio de 2019 11:51