Получение данных через ассоциативный класс - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть две таблицы: Животное и Цирк , которые имеют отношение многих ко многим, порождающее ассоциативный класс Контракт , и у меня есть Порода класс, связанный с Животным отношением один-ко-многим. Как я могу найти Порода , в которой есть максимум животных, фигурирующих в цирках.

Я пробовал это:

var req = from Animal A in Contract
                     group A by A.Breed into g
                     select max { g.Key, Count = g.Count() };

но это не работает что я имею в виду, если для примера имеем:

**Animal_FK**      **Circus_FK**     **Salary**    **Contract_ date**      
----------          ----------      ------------    -------------------

   S3                  C10             3000           2015-12-12

   S1                  C12             5000           2010-10-17

   D2                  C18             4000           2016-02-22

   B4                  C85             3500           2018-09-30

   S2                   C6              2700           2014-05-10


Animal_key        Name          
-------------  -------------          
    S1            Python 
    S2            Cobra              
    S3            Boa              
    D1            Bulldog              
    D2            Labrador              
    B1            Owl
    B2            Dove   





Beer_Key      Name         Description    
----------  ---------    ----------------                    
   S          Snake            reptile      
   D          Dog              pet     
   B          Birds            flying animals      

результат запроса будет Snake

1 Ответ

0 голосов
/ 07 ноября 2018

Я предполагаю, что некоторые 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;

Надеюсь, это поможет. Бретт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...