LINQ función Include

En una consulta para incluir objetos relacionados se utiliza la función Include en caso de que se necesite utilizar un objeto relacionado al que se especifica en la función Include se puede utilizar la sintaxis del siguiente ejemplo:

    Dim wAlm = (From Inv In _db.Inventario.Include("Almacen.Sucursal") _
        Where Inv.NumInventario = (From Tran In _db.InventarioTransferencia _
        Where Tran.NumInventarioS = 1 _
        Select Tran.NumInventarioI).FirstOrDefault _
        Select Inv).FirstOrDefault

    If wAlm IsNot Nothing Then
        wNewFila("Obs") = wAlm.Almacen.Sucursal.DescSucursal & "/" & wAlm.Almacen.DescAlmacen
    End If

En caso de no utilizarse, en la función Include, “Almacen.Sucursal” y solo utilizar “Almacen” el objeto Sucursal no es visible a travéz de Almacen.

Entrada en LINQ, LINQ to Entities, Sin categoría, vb.net, Visual Basic, Visual Studio 2008 | 2 Comments

GridView busqueda y selección (row focus)

Para efectuar una busqueda y seleccionar una fila dentro de un GridView an ASP.NET, podemos utilizar el método SetFocus(objeto), para ello se adicionó a la página un control TextBox(TBBuscar) y un ImageButton(BBuscar) en el evento Click del botón se utiliza el siguiente fragmento de código:

 For Each wGVFila As GridViewRow In GridEmpleado.Rows
    If TBBuscar.Text.ToUpper = Mid(CType(wGVFila.FindControl("_Nombre"), Label).Text, 1, TBBuscar.Text.Length) Then
        SetFocus(wGVFila)
        Exit For
    End If
Next
UpdatePanel1.Update()

Este método funciona en páginas con AJAX (utilizando UpdatePanel, sincrona y asincrona) y páginas que efectuan PostBack.
 

Entrada en ASP.NET, vb.net, Visual Basic, Visual Studio 2008 | 2 Comments

Archivo Dataset.Designer.vb(cs) desvinculado

En ocasiones, al migrar o copiar proyectos en ASP.NET, no quedan enlazados los archivos “Dataset.Designer.vb(cs)“, no encontré el origen del problema pero una solución eficaz es borrar el archivo desvinculado “Dataset.Designer.vb(cs)” y colocar “MSDataSetGenerator” en la propiedad “Herramienta personalizada” del archivo “Dataset.xsd“, inmediatamente se generará el archivo borrado pero esta vez vinculado al Dataset (en este contexto Dataset es el nombre del conjunto de datos por ejemplo DSEmpleado)

Entrada en ASP.NET, Visual Studio 2008 | 1 Comment

LINQ error SqlClient Data Provider, “La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo”

Dentro de una consulta con datos tipo DateTime, se presentó el error “La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo“, “Source:.Net SqlClient Data Provider“; originalmente el código en VB .NET era:


Dim query = From pp In _db.ProductoPrecio Where pp.CodAlmacen = 4 _
And pp.Fecha = (From f In _db.ProductoPrecio _
Where f.Producto.CodProducto = pp.CodProducto _
And f.Almacen.CodAlmacen = 4 Select f.Fecha).Max
Select pp

Dim query1 = From prod In _db.Producto _
order by prod.CodProducto _
Select New With {.CodProducto = prod.CodProducto, _
.CodInterno = prod.CodInterno, _
.NomProducto = prod.NomProducto, _
.Fecha = (From prec In query.Where(function(s) s.CodProducto = prod.CodProducto) Select prec.Fecha).firstordefault, _
.PrecioVenta = (From prec In query Where prec.CodProducto = prod.CodProducto Select prec.PrecioVenta).FirstOrDefault}

la expresión causante del problema es “Select prec.Fecha“, para solucionarlo se la cambio por “CType(pp.Fecha, DateTime?)” quedando el código como sigue:


Dim query = From pp In _db.ProductoPrecio Where pp.CodAlmacen = 4 _
And pp.Fecha = (From f In _db.ProductoPrecio _
Where f.Producto.CodProducto = pp.CodProducto _
And f.Almacen.CodAlmacen = 4 Select f.Fecha).Max
Select pp

Dim query1 = From prod In _db.Producto _
order by prod.CodProducto _
Select New With {.CodProducto = prod.CodProducto, _
.CodInterno = prod.CodInterno, _
.NomProducto = prod.NomProducto, _
.Fecha = (From prec In query.Where(function(s) s.CodProducto = prod.CodProducto) CType(pp.Fecha, DateTime?)).firstordefault, _
.PrecioVenta = (From prec In query Where prec.CodProducto = prod.CodProducto Select prec.PrecioVenta).FirstOrDefault}
Entrada en LINQ, LINQ to Entities, vb.net, Visual Basic, Visual Studio 2008 | 6 Comments

Convertir Integer a Byte() y Byte() a Integer

Cuando se requiera almacenar información como byte, una forma es utilizar la clase BitConverter como se muestra en el siguiente ejemplo:

Dim arByte() As Byte = BitConverter.GetBytes(123456)
Dim Entero As Integer = BitConverter.ToInt32(arByte, 0)

el resultado arByte() es una matriz de 4 elementos de tipo byte con valores {64,226,1,0}, la variable Entero contiene el valor de partida ’123456′

Entrada en .NET WinForms, ASP.NET, vb.net, Visual Basic, Visual Studio 2008 | 3 Comments

LINQ-to-entities, InvalidOperationException: La secuencia no contiene elementos

En una consulta LINQ que no devuelve ningún resultado y utilizamos la función First() se presenta la excepcion, “InvalidOperationException: La secuencia no contiene elementos”. Para resolver esto podemos utilizar la función FirstOrDefault().

Entrada en .NET WinForms, LINQ, Visual Studio 2008 | 2 Comments

LINQ-to-Entities agregar a una asociación muchos-a-muchos

En muchos de los diseños de entidad-relación se tienen relaciones entre entidades del tipo muchos-a-muchos (many-to-many) . Por ejemplo, si consideramos dos entidades ‘servicio’ y ‘cliente’ que tienen una relacion (Association) llamada ‘ServicioCliente’ en la cual se tiene solo las columnas CodServicio y CodCliente, un método muy aconsejable es utilizar:

Using _db As New BDEntities
    Dim ItemServicio As New Servicio With {.CodServicio = 2, _
                                               .TipoServicio = _TipoServicio)}
    _db.AddObject("Servicio", ItemServicio)
    Dim ItemCliente = (From c In _db.Cliente Where c.CodCliente = 1).First
    ItemServicio.Cliente.Add(ItemCliente)
    _db.SaveChanges()
End Using

lo que crea una relación entre el ‘servicio’ 1 y el ‘cliente’ 2 en la tabla de relación ‘ServicioCliente’.

Entrada en .NET WinForms, LINQ, LINQ to Entities, vb.net, Visual Basic, Visual Studio 2008 | 2 Comments

LINQ-to-entities ‘Contains’ en VS 2008

En Visual Studio 2008 el Método “Contains” no esta admitido como en EF4, una forma de seleccionar los elementos contenidos en una lista es utilizar el Método “Any“, como en el siguiente fragmento de código:

Dim lista = From cd In _db.CotizacionDetalle Where cd.Pedido Is Nothing _
    Group cd By NumCotizacion = cd.Cotizacion.NumCotizacion Into g = Group _
    Select NumCotizacion

Dim query = From sp In _db.Cotizacion Where lista.Any(Function(s) s = sp.NumCotizacion) _
    Select New With {.NumCotizacion = sp.NumCotizacion, _
        .CodProveedor = sp.CodProveedor, _
        .Fecha = sp.Fecha, _
        .FechaVigencia = sp.FechaVigencia, _
        .Obs = sp.Obs}
Entrada en LINQ, vb.net, Visual Basic, Visual Studio 2008 | 5 Comments

LINQ group by

Agrupación por multiples columnas de un DataTable:

    Dim query = From m In DSMoneda.Tables("TipoCambio").AsEnumerable _
    Group m By CodMoneda = m.Field(Of String)("CodMoneda"), _
                      Fecha = m.Field(Of Date)("Fecha") _
                      Into Group _
          Select New With {CodMoneda, Fecha, .cant = Group.Count}
Entrada en LINQ to dataset, vb.net, Visual Studio 2008 | 3 Comments

Ejecutar navegador de internet desde Winforms

Para poder ejecutar una aplicación desde Winforms podemos utilizar el Namespace System.Diagnostics, que permite interactuar con procesos del sistema, logs y otros. En este caso especifico para ejecutar el navegador de internet por defecto e ir a una dirección de internet desde una aplicación Winforms se puede efectuar los siguiente:

System.Diagnostics.Process.Start("http://www.midominio.com")

en caso de requerir que se ejecute especificamente Internet Explorer podemos utilizar el siguiente fragmento de código:

System.Diagnostics.Process.Start("IExplore.exe", "www.midominio.com")

este método tambien funciona para otras aplicaciones como Notepad.exe.

Entrada en .NET WinForms, vb.net, Visual Basic | 18 Comments