EF Query упрощение - PullRequest
       3

EF Query упрощение

0 голосов
/ 02 октября 2018
var filters = new List<AllowedFilterModel>();
var collections = _collectionManager.GetAll();

var storesLookup = collections.Select(c => new LookupModel
{
    Id = c.StoreId,
    DisplayName = c.StoreName
}).ToList();

var distinctstoresLookup = storesLookup.GroupBy(c => new {c.DisplayName,c.Id }).Select(c=>c.First()).ToList();

filters.Add(new CollectionFilterModel(FilterVariables.Store)
{
    FilterType = FilterDataType.Collection,
    AllowedValues = distinctstoresLookup
});

Есть ли способ упростить этот запрос или объединить некоторые из них?

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете отбросить промежуточные ToList звонки.Они без необходимости материализуют запрос в список.Похоже, ваш репозиторий должен запрашивать базу данных.ToList форсирует оценку на стороне клиента, что существенно снижает производительность.Используйте SQL Server Profiler, чтобы понять, что я имею в виду.

Вероятно, _collectionManager.GetAll() должен вернуть IQueryable.

Ваш GroupBy реализует только Distinct.Затем из каждой группы вы выбираете первую.Но все объекты в одной группе идентичны.Я подозреваю, что это логическая ошибка ...

Поскольку запрос существует, вы можете сделать его следующим образом:

var results =
 _collectionManager.GetAll()
 .Select(c => new LookupModel
 {
     Id = c.StoreId,
     DisplayName = c.StoreName
 })
 .Distinct()
 .ToList();

Что гораздо удобнее для чтения, чем использование всех этих временных переменных.

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