Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2022, 18:59   #1
Farlep
Пользователь
 
Регистрация: 01.01.2021
Сообщений: 30
По умолчанию Оптимизация LINQ запроса

Добрый день.

Есть 3 класса

Страна, Область, Город

Код:
public class Country
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Continent { get; set; }

        // у страны есть множество областей
        public virtual ICollection<Area> Areas { get; set; }

        public override string ToString()
        {
            return Name + " (" + Continent + ")";
        }
    }
Код:
public class Area
    {
        public Guid Id { get; set; }
        public string Name { get; set; }

        public float Square { get; set; }

        public Guid CountryId { get; set; }

        // у области есть страна
        public virtual Country Country { get; set; }

        // у области есть множество городов
        public virtual ICollection<City> Cities { get; set; }

        public override string ToString()
        {
           return $"{Name} (Площадь {Square} км²)";
        }
    }
Код:
public class City
    {
        public Guid Id { get; set; }

        public string Name { get; set; }
        public int Residents { get; set; }
        public bool Capital { get; set; } = false;
        public Guid AreaId { get; set; }

        // у города есть область
        public virtual Area Area { get; set; }

        public override string ToString()
        {
            return this.Capital == false ? $"{Name} (Населения: {Residents})" : $"{Name} (Населения: {Residents}) - Столица";
        }
    }
Задача состоит в том, что бы посчитать количество резидентов в каждой стране

Я решил задачу двумя запросами LINQ.

Первый запрос прошелся по городам и создал анонимный класс с именем Страны и количество резидентов равным в городе

После этого через GroupBy сгруппировал страны по имени и просуммировал резидентов.

Можно как то оптимизировать запрос ?

Код:
var totalResident =
      from ord in dbContext.Cities
      select new{Name = ord.Area.Country.Name, Residents = ord.Residents};

var grouped =
      totalResident.GroupBy(c => c.Name).Select(
       group => new {Name = group.Key, Residents = group.Sum(c => c.Residents)});
Farlep вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректное отображение linq запроса к связанным таблицам dataset, datatable c# Alena16 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 08.12.2021 20:39
Помощь в создании Linq запроса. inmyacid C# (си шарп) 4 16.05.2014 14:16
Как узнать количество полученных записей в результате запроса LINQ to DataSet? Гаврилов C# (си шарп) 5 03.09.2012 16:21
оптимизация sql-запроса Vetra SQL, базы данных 0 20.07.2011 13:36
Заполнение DataTable из LINQ-запроса tavrocotaps Общие вопросы .NET 0 13.08.2010 14:43