sábado 15 de mayo de 2010

LINQ – Función IsNull en LINQ To SQL

Implementar la función IsNull en LINQ To SQL es sencillo. Consiste en crear el método en la clase parcial del DataContext de nuestro DBML.

En el ejemplo, vamos a crear una función IsNull para campos tipo DateTime.

Ir al código fuente de la clase DataContext de nuestro DBML (desde DBML > ver código fuente). Debería quedar más o menos como esto (nota: por motivos de ancho de la caja que contiene el texto de cada publicación dentro del blog pueden encontrarse líneas de código separadas que deberían ir en la misma línea):

Imports System.Data.Linq.Mapping
Imports System.Reflection

Partial Class BDDataContext

<FunctionAttribute(Name:="IsNull", IsComposable:=True)> _
Public Function IsNullDateTime( _
<Parameter(Name:="field", DbType:="DATETIME")> ByVal field As DateTime?, _
<Parameter(Name:="output", DbType:="DATETIME")> ByVal output As DateTime?) As DateTime?
      Return CType(Me.ExecuteMethodCall(Me, _
      CType(MethodInfo.GetCurrentMethod(), MethodInfo),field, _
            output).ReturnValue, DateTime?)
End Function

End Class

Como podemos observar mediante los atributos Parameter indicamos los dos parámetros de la función IsNull de SQL Server. En ellos se indica tipo de dato dentro de la base de datos.

Uso:

Using ctx = new BDDataContext()
  Dim resultado = From c in ctx.Categories _
    Order By ctx.IsNullDateTime(c.Fecha1, DateTime.Now)
_
   Select c
End Using

Esto mismo podemos aplicarlo para cualquier otra función que exista en SQL Server pero no en LINQ.

Etiquetas de Technorati: ,,