Я предполагаю, что вы используете тот же экземпляр DbContext
, поэтому отслеживаемые объекты из предыдущих вызовов включаются в результаты сбора более поздних вызовов League.Teams
.Вы можете попробовать .AsNoTracking()
, чтобы увидеть, помогает ли это, но это может помешать подключению результатов отфильтрованного включения EF Plus к коллекции League.Teams
(это просто делает это с обычной реализацией EF).
Лично,Я спроектировал бы и затем составил бы результаты, которые я хочу без EF Plus.Например:
return Context.Leagues.Select( l => new
{
League = l,
Teams = l.Teams.Where( t => t.Year == year ),
}
.ToArray()
.Select( at =>
{
var l = at.League;
l.Teams = at.Teams;
return l;
} );
Мне не нравится многократное использование здесь класса League
, поскольку другой пользователь может подумать, что вся коллекция Teams
загружена где-то в будущем.Возможно, создайте DTO для такого использования.
Другое решение состоит в том, чтобы начать с другого конца и группировать по лиге:
return Context.Teams.Where( t => t.Year == year )
.GroupBy( t => t.League );
TKey
равно League
, а TElement
равноTeam
(ниже для иллюстративных целей достаточно результата IGrouping<League, Team>
для вашего использования):
results.Select( g => new
{
League = g.Key,
Teams = g,
} );
Все, что сказано, если вы не заинтересованы в отслеживании сущностей, используя другойDbContext
экземпляр за вызов не должен существенно снижать производительность.