Entity Framework Core Count внутри Select - PullRequest
0 голосов
/ 08 января 2019

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

return new Count
        {
            Address = this.Filter(/* paramters to filter */)
                .GroupBy(person => person.Address.City)
                .Select(group => new Amount<string>
                {
                    Type = group.Key /* so the city */,
                    Count = group.Count()
                }),
        };

У Count есть пара списков объектов количества. Объекты количества содержат имя того, на что он будет фильтроваться, и количество того, что фильтр содержит.

this.Filter()

Это закрытый метод, который возвращает IQueryable из DbContext.

Все работает, однако, это очень медленно с большим количеством данных. Причина этого заключается в том, что GroupBy () и Count () не могут быть переведены и будут оцениваться локально. Это дает следующие предупреждения:

warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'GroupBy([entity.RequestRating], [entity])' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Count()' could not be translated and will be evaluated locally.
warn: Microsoft.EntityFrameworkCore.Query[20500]
      The LINQ expression 'Count()' could not be translated and will be evaluated locally.

Что может быть лучше для этого? Это проект ASP.NET CORE

1 Ответ

0 голосов
/ 08 января 2019

Попробуйте это:

var amountList = Persons.Where(paramters to filter)
            .GroupBy(person => person.Address.City)
            .Select(group => new Amount()
            {
                City = group.Key,
                CityCount = group.Count()
            }).Tolist();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...