I Love linq to objects

Thursday, August 21, 2008 9:37:57 AM (W. Europe Standard Time, UTC+01:00)

Estamos super liados con proyectos nuevos, de ultima hora y para anteayer, asi que nos queda poco tiempo para escribir ... pero hace mucho tiempo que tengo pendiente este POST, asi que ..

Estoy empezando a usar linq to objects para trabajar con mis colecciones de objetos y la verdad es que es alucinante, se simplifica tanto el codigo, teneis que probarlo, engancha ...

Voy a dejar unos ejemplos de codigo que estoy usando en los proyectos en marcha.

Aqui tenia un metodo que tenia que buscar en mi coleccion por unos valores y si no encontraba esos valores buscar por el mas cercano superior, eso en LINQ se queda en esta linea

var t = from t1 in Lista
where
1.CodigoHabitacionLineaTarifaCliente == CodHabitacion
&&
t1.CodigoRegimenLineaTarifaCliente == CodigoRegimen
&&
t1.CodigoTarifaLineaTarifaCliene == CodigoTarifa
&&
t1.AdultosLineaTarifaCliente >= AD
&&
t1.NinosLineaTarifaCliente >= CH
&&
t1.CunasLineaTarifaCliente >= EN
orderby 
t1.AdultosLineaTarifaCliente, 
t1.NinosLineaTarifaCliente, 
t1.CunasLineaTarifaCliente ascending
select t1;
Aqui una busqueda normal, de las de toda la vida
var t = from t1 in Lista
where
t1.CodigoHabitacionLineaTarifaCliente == CodHabitacion
&&
t1.CodigoRegimenLineaTarifaCliente == CodigoRegimen
&&
t1.CodigoTarifaLineaTarifaCliene == CodigoTarifa
select t1;
if (t.Count() == 0)
  throw new Exception(NDatos);
 Y lo mejor, usar sum y group by en nuestras colecciones,
aqui agrupando y sumando precios x Dia.
var GroupedPrices = from pd in b.PriceDetails group pd by pd.Day into g 
select new {Day = g.Key, TotalPriceDay = g.Sum(v1 => v1.Amount)};
Cuando empeceis a usarlo no podreis vivir sin el :) 

Profiling SQL CLR procedures con AQTime

Wednesday, June 11, 2008 9:23:06 AM (W. Europe Standard Time, UTC+01:00)

Intentando mejorar el rendimiento de unos procedimientos almacenados CLR que utilizamos en un proyecto hemos dado con esta herramienta que nos ha facilitado mucho las cosas. Podéis descargaros una versión de prueba desde aquí.

Aqtimebanner

Y aquí teneis los pasos necesarios para poder analizar procedimientos almacenados CLR.

SQL Summit Madrid 2008

Tuesday, May 20, 2008 9:23:28 AM (W. Europe Standard Time, UTC+01:00)

La gente de Solid Quality Mentors organiza en Madrid del 23 al 27 de Junio el SQL Summit 2008.

Las sesiones se dividen en tres categorias, Relacional, BI y Desarrollo, podeis encontrar la agenda aqui

Jordi y yo estaremos alli, asi que si alguno va, alli nos vemos.

Enterprise Library 4.0 para Visual Studio 2008 Disponible

Monday, May 19, 2008 9:54:51 AM (W. Europe Standard Time, UTC+01:00)

Microsoft patterns & practices anuncia que ya esta disponible Enterprise Library 4.0.

Esta version incluye lo siguiente:

– Integracion con the Unity Application Block

– Windows Management Instrumentation (WMI) 2.0

– Mejoras de Rendimiento

– Soporte para Visual Studio 2008

– Bugs Corregidos

Para ver la lista de cambios detallados ir a About This Release of Enterprise Library.

Cliente SOAP para servicios PHP o Java AXIS

Monday, April 14, 2008 8:46:38 AM (W. Europe Standard Time, UTC+01:00)
Aqui dejo una clase para consumir servicios web via SOAP en los que no tengamos el WSDL o que el Wizard nos de problemas:
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Xml;

namespace Test
    {
    class SOAPClient
        {

        public static XmlDocument SendMsg(XmlDocument xmlRQ)
            {
                byte[] byte1;
                Stream myStream;
                StreamReader readStream;

                HttpWebRequest wr = 
                    (HttpWebRequest)WebRequest.
                    Create("http://laurl.com/ws.php");

                byte1 = 
                Encoding.GetEncoding(1252).GetBytes(xmlRQ.OuterXml);
                wr.Method = "POST";
                wr.Headers.Add("SOAPAction", "");
                wr.ContentType = "text/xml; charset=\"utf-8\"";
                wr.Accept = "text/xml";


                myStream = wr.GetRequestStream();
                myStream.Write(byte1, 0, byte1.Length);
                myStream.Close();

                myStream = wr.GetResponse().GetResponseStream();
                readStream = new StreamReader(myStream);
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(readStream);
                myStream.Close();

                return getSOAPPayload(xmlDoc, "body");
            }

          private static XmlDocument getSOAPPayload(XmlDocument rs, 
                                                    string Tag)
            {

                XmlNode xmlNode = 
                    rs.GetElementsByTagName(Tag)[0].FirstChild;
                XmlDocument xmlResult = new XmlDocument();                
                xmlResult.LoadXml(xmlNode.Value);
                return xmlResult;
            }        

        }    
    }

IIS7 Mobile Admin

Wednesday, March 26, 2008 12:12:02 PM (W. Europe Standard Time, UTC+01:00)

IIS7 Mobile Admin es un aplicación web para la administración remota de IIS7. Esta desarrollada en ASP.NET + Linq + IIS7 managed API. La aplicación web debe hospedarse en el servidor IIS7 como website con su propio Application Pool.

Podeis bajaros la aplicación y el código fuente desde aquí.

Internet Explorer 8 Beta

Friday, March 07, 2008 9:52:55 AM (W. Europe Standard Time, UTC+01:00)

Llego la beta del IE8

Tal como se venía anunciando, la nueva versión del navegador de Microsoft fue presentada en el MIX ‘08, con una demostración de sus nuevas características, entre las que se destacan su integración a Facebook y eBay, conformidad con los estándares y capacidad para trabajar con sitios que emplean AJAX.

 

Sarah Perez comenta en ReadWriteWeb, la llegada de Internet Explorer 8, señalando que la versión parcial del programa incluye las siguientes características destacadas:

·         Conformidad con los estándares: Algo que se había anticipado en el Blog de IE, a partir de que se anunció que la nueva versión había pasado el Acid2 test.
Además, hace un par de días, Dean Hachamovitch, Manager General de Internet Explorer, adelantó que por defecto, IE8 presentaría el modo obediente con los estándares, de acuerdo con los principios de interoperabilidad que habían anunciado semanas atrás.

·         Por otra parte, la integración de IE8 con otros sitios y servicios se realiza utilizando una nueva tecnología, llamada “WebSlices”, que es una forma de conseguir actualizaciones de otros sitios vía el navegador, sin tener que visitar los mismos.
De este modo, Microsoft ha capitalizado su sociedad con Facebook, la red social más popular de la web, al incorporarla a la toolbar de su navegador. Lo mismo sucede con eBay, Live Maps y Me.dium.

·         Se asegura que IE8 funciona mucho mejor en sitios con AJAX.

Adelantándose a todas las previsiones, que esperaban su lanzamiento público recién para mediados de año, la beta pública ya está disponible para su descarga, por lo que comenzaran a llegar comentarios a partir de su prueba efectiva, por parte de los usuarios.

http://feeds.feedburner.com/~r/maestrosdelweb/~4/246543197Desde http://www.maestrosdelweb.com/

Ordenar una Lista - List.Sort()

Monday, February 25, 2008 3:40:57 PM (W. Europe Standard Time, UTC+01:00)

Las listas genericas tienen el metodo Sort que nos permite ordenar la lista de objetos, esto es una operacion sencilla cuando la lista contiene objetos simples como fechas o numeros, pero cuando tenemos nuestras propias clases en esa lista podemos necesitar controlar como se orderna.

Para eso disponemos del IComparer en una de las sobrecargas del metodo donde podemos implementar como se ordenaran los objetos.

El caso mas tipico ,y el mas sencillo, seria ordenar la lista de clases por un campo de la clase, en este ejemplo por el campo index de mi clase:

 public class MyClass
 {
     public int index;
 }

 private static int Comparer(MyClass x, MyClass y)
 {
     return x.index.CompareTo(y.index);
 }

 public List<MyClass> SortMyClassList(List<MyClass> MyClassList)
 {
     MyClassList.Sort(Comparer);
     return MyClassList;
 } 

Una version mas elegante con delegados:

public List<MyClass> SortMyClassList(List<MyClass> MyClassList)
   {
       MyClassList.Sort(
           delegate(MyClass x, MyClass y) 
           { return x.index.CompareTo(y.index); }
           );
       return MyClassList;
   }    

Luego esto lo puedes complicar como quieras, sabiendo que:


Si x es mayor devuelve positivo.
Si son iguales 0 .
Si x es menor negativo.

Deklarit 4.5 para VS2008

Tuesday, February 12, 2008 12:43:30 PM (W. Europe Standard Time, UTC+01:00)

La gente de Deklarit acaba de anunciar que publican la version final del 4.5 para VS2008, para nosotros es una gran noticia ya que aguantabamos algunos proyectos en VS2005 por el tema del Deklarit.

Para los que no lo conozcais, Deklarit es una herramienta RAD, es un Addin de VS que te permite definir visualmente tu modelo de negocio y desde este generar BD, Classes, UI, WS, ect ..

VS 2008 Web Development Hot-Fix

Monday, February 11, 2008 10:22:48 AM (W. Europe Standard Time, UTC+01:00)

Microsoft ha publicado un nuevo hot-fix para vs 2008 que arregla varios bugs en proyectos Web. La lista de problemas que arregla la teneis aquí.

VS 2008 Web Development Hot-Fix