Прежде всего, хранение деталей проекта в виде Списка невозможно. Вам необходимо создать пользовательский класс для их представления.
Например,
public class DetailedProjectList
{
public string Name {get;set;}
public eStatus Status {get;set;}
// rest of properties
}
Тогда вы можете использовать
var result = MyProjects.OrderBy(x=> sortProjectsBy.IndexOf(x.Status));
Например
List<string> sortProjectsBy = new List<string>(){"Slow", "Normal", "Fast", "", "Suspended"};
var MyProjects= new List<DetailedProjectList>{
new DetailedProjectList{Name="abc1", Status="Fast"},
new DetailedProjectList{Name="abc2", Status="Normal"},
new DetailedProjectList{Name="abc3", Status="Slow"},
};
var result = MyProjects.OrderBy(x=> sortProjectsBy.IndexOf(x.Status));
Выход
abc3 Slow
abc2 Normal
abc1 Fast
Лучше всего было бы использовать Enum для представления статуса.
public enum eStatus
{
Slow,
Normal,
Fast,
Unknown,
Suspended
}
Тогда ваш код можно упростить до
var MyProjects= new List<DetailedProjectList>{
new DetailedProjectList{Name="abc1", Status=eStatus.Fast},
new DetailedProjectList{Name="abc2", Status=eStatus.Normal},
new DetailedProjectList{Name="abc3", Status=eStatus.Slow},
};
var result = MyProjects.OrderBy(x=> x.Status);