Я предполагаю, что некоторые POCO здесь. Я не буду предоставлять дополнительные детали, такие как зарплата и т. Д., Только минимальные.
public class Breed
{
public string Name { get; set; }
}
public class Animal
{
public string Name { get; set; }
public Breed Breed { get; set; }
}
public class Circus
{
public string Name { get; set; }
}
public class Contract
{
public Animal Performer { get; set; }
public Circus Venue { get; set; }
}
Затем настройте некоторые данные, которые представляют то, что у вас есть выше.
var breeds = new[]
{
new Breed {Name = "Snake"},
new Breed {Name = "Dog"},
new Breed {Name = "Bird"}
};
var animals = new[]
{
new Animal{Name="Boa", Breed = breeds[0]}, // 0
new Animal{Name="Python", Breed = breeds[0]}, // 1
new Animal{Name="Cobra", Breed = breeds[0]}, // 2
new Animal{Name="Bulldog", Breed = breeds[1]}, // 3
new Animal{Name="Labrador", Breed = breeds[1]},// 4
new Animal{Name="Dove", Breed = breeds[1]}, // 5
new Animal{Name="Owl", Breed = breeds[2]}, // 6
};
var circuses = new[]
{
new Circus {Name = "C1"},
new Circus {Name = "C2"},
new Circus {Name = "C3"},
new Circus {Name = "C4"},
new Circus {Name = "C5"},
};
var contracts = new[]
{
new Contract {Performer = animals[0], Venue = circuses[0]},
new Contract {Performer = animals[1], Venue = circuses[1]},
new Contract {Performer = animals[2], Venue = circuses[2]},
new Contract {Performer = animals[4], Venue = circuses[3]},
new Contract {Performer = animals[6], Venue = circuses[4]},
};
Тогда вы получите наиболее представительную породу:
var mostRepresentedBreed = (
from contract in contracts
group contract by contract.Animal.Breed
into contractsByBreed
orderby contractsByBreed.Count() descending
select contractsByBreed.Key
).FirstOrDefault();
var theWinnerIs = mostRepresentedBreed.Name;
Надеюсь, это поможет.
Бретт.