martes, 1 de junio de 2010

Listados inversos con Linq

Poco a poco me encanta cada vez más Linq.

Una cosa que es harto complicada de obtener por medio de SQL o con ADO, con Linq es muy sencillito: teniendo un listado de máquinas, obtener todas aquellas que no estén asignadas a un proyecto dado.
/// <summary>
/// Returns a list with all the machines assigned to a project
/// </summary>
/// <param name="pDataContext">Datacontext where the objects are loaded</param>
/// <param name="pIdProject">ID of the project</param>
/// <returns>A list with the elements</returns>
public static IQueryable<Maquina> GetMachineListNotProject(QTestDataContext pDataContext, int pIdProject)
{
//First recover the machines ASSIGNED to the project
IQueryable<Maquina> assignedList = GetMachineList(pDataContext, pIdProject);

//Now select those machines not in the previous list
return pDataContext.Maquina.Where(ob => !(assignedList.Contains(ob))).Select(ob => ob);
}


Me encanta.

Primero me traigo la lista de todas las máquinas y después selecciono aquellos que no estén contenido en dicho listado.

Simple y funcional.

Ahora solo quedaría traducirlo de expresiones lambda a Linq.


P.D. El uso del DataContext y el que esté en inglés es por el motivo que es una pieza de código de un proyecto real.

No hay comentarios: