Увы, вы забыли написать свой класс T1.Мне кажется, что помимо идентификатора он также имеет отношение Country
a City
и отношение один ко многим с School
и Collage
(вы имели в виду College
?).Примерно так:
class T1
{
public int Id {get; set;}
public string Country {get; set;}
public string City {get; set;}
// relations: every T1 has zero or more Schools and Colleges:
public virtual ICollection<School> Schools {get; set;}
public virtual ICollection<College> Colleges {get; set;}
}
public class School
{
public int Id {get; set;}
// every School belongs to exactly one T1 using virtual key
public int T1Id {get; set;}
public virtual T1 T1 {get; set;}
...
}
public class College
{
public int Id {get; set;}
// every College belongs to exactly one T1 using virtual key
public int T1Id {get; set;}
public virtual T1 T1 {get; set;}
...
}
class MyDbContext : DbContext
{
public DbSet<T1> T1s {get; set;}
public DbSet<School> Schools {get; set;}
public DbSet<College> Colleges {get; set;}
}
Этого достаточно для структуры сущностей, чтобы понять, какой тип отношений вы хотите разработать.
Ваш запрос будет:
var result = myDbContext.T1s.GroupBy(item => new {item.Country, item.city})
.Select(group => new
{
Country = group.Key.Country,
City = group.Key.City,
NumberOfSchools = group.SelectMany(groupElement => groupElement.Schools)
.Count(),
NumberOfColleges = group.SelectMany(groupElement => groupElement.Colleges)
.Count(),
})
Словами: из каждого элемента в вашей последовательности T1 составьте группы элементов с одинаковой комбинацией город / страна.Может быть несколько одинаковых комбинаций город / страна (в США есть много мест, называемых Йорк).Таким образом, группа может иметь несколько элементов.Из каждого элемента в группе возьмите общий город / страну, который хранится в ключе группы.Из всех элементов в группе возьмите Школы и сосчитайте все Школы вместе.Сделайте то же самое с колледжами.
Помните: вы получаете Школы из Йорка в Аризоне и Йорка в Южной Дакоте вместе.Не уверен, что это именно то, что вам нужно, но именно это делает ваш SQL.
Последнее замечание
Каждый город находится в стране.Каждая страна имеет ноль или более городов.Разве не было бы лучше поместить города и страны в свои собственные таблицы с отношением один ко многим?Например, если вы переименуете «Ленинград» в «Синт-Петербург», хотите ли вы обновить таблицу всех «Персонов»?И если «Севастополь» изменит страну с «Украины» на «Российскую Федерацию», вы бы тоже хотели обновить всех граждан?Выбирайте таблицы и идентификаторы так, чтобы, если у вас есть вещь, она не стала другой, если она поменяла имя или местоположение.