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