Lo podes hacer con linq utilizando el operador group by.
 
Pero vas a necesitar crearte una lista de tipo clase.
Tengo un articulo donde explico como usar el group by
Agrupar Datos Linq (GroupBy) C# - VB.Net 
En tu caso también tendrias que usar el operador count algo así.   
Código c#:
Ver originalpublic class Color
{
   public string Color{ get; set; }
   public Persona(string col)
   {
       Color = col;
   }
}
 
List<Color> colores = new List<Color>
{
   new Color("Rojo"),
   new Color("Rojo"),
   new Color("Amarillo"),
   new Color("Amarillo")
 
};
  
Ahi tendrias algunos registros ahora aplicas linq.   
Código c#:
Ver originalvar query = colores.GroupBy(c => c.Color,
            (numcolor) => new
            {
                    Color = numcolor.Count()
            });
  
Como veras primero agrupas los datos con groupby y luego usas count para contarlos, no he probado el código lo he puesto sin probarlo pero creo que te tendría que funcionar.