¿Reescribir este rendimiento para cada rendimiento a un rendimiento de linq?

Digamos que tengo el siguiente código (el contexto se reduce para mantener el alcance de la pregunta limitado)

public static IEnumerable<Color> GetThemColors(){
    var ids = GetThePrimaryIds();
    foreach (int id in ids){
        yield return GetColorById(id);
    }
    ids = GetTheOtherIds();
    foreach (int id in ids){
        yield return GetOtherColorsById(id);
    }
}

Me gustaría reescribirlos a algo como esto (que, por supuesto, no compila

public static IEnumerable<Color> GetThemColors(){
    GetThePrimaryIds().Select(id=>yield return GetColorById(id));
    GetTheOtherIds().Select(id=>yield return GetOtherColorsById(id));       
}

El punto clave es que en mi primer fragmento tengo dos forumadores de rendimiento por cada uno, que no sé cómo hacer en linq sin perder mis funciones de carga perezosa.

Respuestas a la pregunta(1)

Su respuesta a la pregunta