Предполагая, что вы хотите отобразить различные критерии пригодности, а не просто упорядоченный список заводов, я думаю, вам нужно определить класс с дополнительными данными:
class PlantRankings
{
public Plant Plant { get; set; }
public double PhSuitabilityScore { get; set; }
public double SoilTypeScore { get; set; }
public double SmellsNiceScore { get; set; }
public double RankingScore { get; set; } // could compute on-the-fly here
}
и сопоставить ваши заводы с этимкласс, а затем сортировать по комбинированному баллу там.Я полагаю, что вы бы написали метод, который бы принимал растение, а ваши критерии затем возвращали структуру ранжирования, например
var rankedPlants = plants.Select(p => ScoreSuitability(p, criteria))
.OrderBy(pr => pr.RankingScore).ToList();
Если под рангом вы подразумевали ранжирование 1-N для каждого растения по каждому критерию, то сноваЯ думаю, что вам нужно будет создать расширенную структуру, но с
public int PhSuitabilityRank { get; set; }
вместе со счетами;затем, как только вы вычислили счет и построили список, вы можете
int rank = 1;
for(var rankedPlant in
rankedPlants.OrderByDescending(pr => pr.PhSuitabilityScore))
{
rankedPlant.PhSuitabilityRank = rank;
++rank;
}
и так далее.(Может быть способ сделать это в LINQ, но без .ForEach () для результатов Order, я думаю, это будет яснее и проще.)