Какой подход лучше в LINQ? - PullRequest
3 голосов
/ 26 июня 2019

Я использую linq в c # и у меня быстрый вопрос.

Я показал очень минимальное количество кода здесь, в реальном времени также есть некоторые операции сортировки.Я хотел бы знать ниже, какой подход я должен использовать ??

Подход 1

 public class UserDetails
    {
        private dbContext db = new dbContext();
        public List<User> ActiveUser()
        {
          return db.Users.Where(m => m.Active == true).ToList();                   
        }
        public List<User> InActiveUser()
        {
          return db.Users.Where(m => m.Active == false).ToList();                   
        }

    }

Подход2

 public class UserDetails
    {
       List<Defect> allUser = new dbContext().Users.ToList();
        public List<User> ActiveUser()
        {
          return allUser.Where(m => m.Active == true).ToList();                   
        }
        public List<User> InActiveUser()
        {
          return allUser.Where(m => m.Active == false).ToList();                   
        }

    }

Существует более 20 методов, которые извлекают данные, каждый метод извлекает данные из одной и той же таблицы с различным условием где.Мой вопрос: должен ли я создать dbContext, а затем использовать отдельный запрос в каждом методе ( Approch 1 ) ИЛИ Должен ли я создать один список и извлечь все данные и отфильтровать его в самом методе, используя условие where,( Приблизительно 2 )

Ответы [ 3 ]

5 голосов
/ 26 июня 2019

Зависит от обстоятельств.В целом, я бы предпочел подход 1, так как обычно вы не можете предсказать, сколько пользователей в вашей базе данных, и вы вытянете всех пользователей в память, что приведет к большим накладным расходам памяти.Также для большого количества пользователей вы будете использовать преимущества оптимизации базы данных, такие как индексы и планы выполнения запросов.

Если мы говорим о небольшом количестве пользователей, подход 2 может быть более производительным, так как вы уменьшаете количествопоездки в базу данных.Но помимо накладных расходов на память у него также есть другие проблемы, такие как кэширование пользователей и отсутствие обновлений базы данных.

Однако я почти всегда предпочел бы подход 1, так как рекомендуется выполнять большую часть работы по фильтрации и сортировке.база данных, так как она оптимизирована для подобных вещей.С подходом 2 вы можете столкнуться с проблемами, так как ваша пользовательская база со временем увеличивается, и вам будет сложно отследить проблемы с кэшированием или памятью.Кроме того, разница между одним и двумя обходами базы данных в основном незначительна, если у вас нет действительно плохого соединения или вы делаете это много раз.

2 голосов
/ 26 июня 2019

Никогда не загружайте ненужные данные.В подходе 2 вы загружаете ненужный объем данных.

0 голосов
/ 26 июня 2019

Я лично иду с первым подходом, потому что в первом подходе отфильтрованные данные выбираются из базы данных, в то время как при втором подходе все данные выбираются, а затем фильтрация выполняется на уровне структуры вместо уровня базы данных, поэтому в первом подходе мы может получить выигрыш в производительности.

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