Si no quieres vender…

En el trabajo andamos buscando tablets. Descartado Android tras una serie de pruebas, el siguiente paso es Windows. La duda está en si 8, RT o CE. Para no entramparnos en comprar una tablet profesional (cuestan una pasta) decidimos buscar una baratita para pruebas en el departamento y luego decidir. Encontramos la Acer Iconia W3 como candidata ideal. Barata y con Windows 8 (8,1» de pantalla y una memoria interna ridícula, pues sólo vemos la versión de 32GB; vamos, que no me la compraba para mí ni loco).

Mi jefe de departamento se acerca a El Corte Inglés, donde la tienen clasificada como con Windows RT y el vendedor dice que tiene RT (y echa pestes del sistema; entiendo que se pueda considerar «capado» con respecto a Windows 8, pero Android e iOS entran en el mismo saco), así que ante la duda vuelve con las manos vacías.

Consultamos la página del fabricante. Queda bien claro. Procesador Atom, Windows 8… Encontramos de paso otro sitio donde está más barato, así que vamos allí, la pescamos y vuelta.

El tiempo que pierdes porque no te quieren vender.

Operador Update

El otro día necesitaba actualizar valores en una colección de DataRows tipadas y echaba de menos no poder hacerlo con LINQ, así que me puse a buscar. Y buscando, buscando, encontré el código para un método de extensión Update que soluciona la papeleta. El código está aquí en C# y en Visual Basic quedaría así:

Public Delegate Sub Func(Of TArg0)(element As TArg0)

''' <summary>
''' Executes an Update statement block on all elements in an IEnumerable(T) sequence.
''' </summary>
''' <typeparam name=TSource">The source element type.</typeparam>"
''' <param name=source">The source sequence.</param>"
''' <param name=Updater">The update statement to execute for each element.</param>"
''' <returns>The numer of records affected.</returns>
<System.Runtime.CompilerServices.Extension> _
Public Function Update(Of TSource)(source As IEnumerable(Of TSource), Updater As Func(Of TSource)) As Integer
    If source Is Nothing Then
        Throw New ArgumentNullException("source")
    End If
    If Updater Is Nothing Then
        Throw New ArgumentNullException("update")
    End If
    If GetType(TSource).IsValueType Then
        Throw New NotSupportedException("value type elements are not supported by update.")
    End If

    Dim count As Integer = 0
    For Each element As TSource In source
        Updater(element)
        count += 1
    Next
    Return count
End Function

Su uso sería algo así:

TareasParaArticulo.Where(Function(x) x.IdUsuario = 0).Update(Function(x) x.IdUsuario = JefeProyecto)

Donde TareasParaArticulo es un conjunto de datarows tipadas (un list, un datatable…, tanto da). Lo que hace esta parte de la aplicación, para ponernos en situación, es crear una serie de tareas (tomadas de una plantilla de tareas) cuando un artículo es añadido a un proyecto. El uso del Update permite asignar aquellas tareas que en la plantilla tienen como IdUsuario el 0 al jefe del proyecto de una forma sencilla.