Bueno, como dice el dicho lo que es dificil de explicar es dificil de hacer. En fin, ya lo solucione y volvi para compartir el codigo por si algun dia le sirve:
Código c#:
Ver original// debria devolver => { 1, 2, 2, 4, 4, 5 }
int[] listaUno = new int[] { 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 5 };
int[] listaDos = new int[] { 1, 1, 2, 2, 3 };
var agrupUno = listaUno.GroupBy(i => i, (k, v) => new { Codigo = k, Cantidad = v.Count() }).ToArray();
var agrupDos = listaDos.GroupBy(i => i, (k, v) => new { Codigo = k, Cantidad = v.Count() }).ToArray();
var resul = (from a1 in agrupUno
join a2 in agrupDos
on a1.Codigo equals a2.Codigo into lj
from laposta in lj.DefaultIfEmpty()
select new { Codigo = a1.Codigo, Cantidad = (laposta == null)? a1.Cantidad: (a1.Cantidad - laposta.Cantidad) }).ToArray();
Es un poco rebuscado, si alguien mas quiere aportar algo bienvenido sea.