using System.Collections.Generic;
public static class Implementation
public static int CountOfCode1(List<Animal> animals)
return animals.Count(a => a.Codes.Any(c => c.CodeID == 1));
public static List<ClinicalCode> ReturnUniqueCodes(List<ClinicalCode> list) {
return list.GroupBy(l => l.CodeID).Select(g=>g.FirstOrDefault()).ToList();
public static List<int> AnimalsInBothLists(List<Animal> listA, List<Animal> listB)
var listAAnimals = listA.Select(a => a.AnimalID);
var result = listB.Where(a => listAAnimals.Contains(a.AnimalID));
return result.Select(a => a.AnimalID).ToList();
public static List<int> AnimalsOnlyInA(List<Animal> listA, List<Animal> listB)
var listBAnimals = listB.Select(a => a.AnimalID);
var result = listA.Where(a => !listBAnimals.Contains(a.AnimalID));
return result.Select(a => a.AnimalID).ToList();
public static int CountOfCode1And2(List<Animal> animals)
var withCodeIdOne = animals.Where(a=>a.Codes.Any(c => c.CodeID == 1));
var withCodeIdTwo = animals.Where(a=>a.Codes.Any(c => c.CodeID == 2));
var withBoth = withCodeIdOne.Intersect(withCodeIdTwo);
public class ClinicalCode
public int CodeID { get; set; }
public string CodeName { get; set; }
public int AnimalID { get; set; }
public List<ClinicalCode> Codes { get; set; }
public override bool Equals(object obj)
var other = obj as Animal;
return this.AnimalID == other.AnimalID;
public override int GetHashCode()
public static void Main(string[] args)
Implementation.CountOfCode1(DataSource.GetSomeData().ToList());
Implementation.CountOfCode1And2(DataSource.GetSomeData().ToList());
Implementation.AnimalsInBothLists(DataSource.GetSomeData().ToList(), DataSource.GetSomeData().ToList());
Implementation.AnimalsOnlyInA(DataSource.GetSomeData().ToList(), DataSource.GetSomeData().ToList());
public static class DataSource {
public static Random rnd = new Random();
public static IEnumerable<Animal> GetSomeData()
var max = rnd.Next(300, 400);
return Enumerable.Range(1, max).Select(animalId => {
var codes = Enumerable.Range(1, 11).Select(codeId => {
var clinicalCodeId = rnd.Next(1, 5);
CodeName = "The name of the diagnosis"