LINQ2Entities & AutoMapper: возьмите и пропустите на брошенном IQueryable объединяет все навигационные таблицы - PullRequest
0 голосов
/ 14 ноября 2018

В настоящее время я использую AutoMapper с явно отображенными полями, а также возможностью подкачки страниц в сочетании с LINQ to Entities.Интересующая меня часть кода выглядит следующим образом:

        var result = page.ApplyPaging(query)
            .AsQueryable()
            .Project()
            .To<TDto>(null, membersToMap)
            .ToList();

И подкачка осуществляется с помощью:

    public IEnumerable<T> ApplyPaging<T>(IEnumerable<T> source)
    {
        if (!PagingEnabled)
        {
            return source;
        }

        var skippedEntries = (PageNumber.GetValueOrDefault(1) - 1) * PageSize;
        var result = source.Skip(skippedEntries).Take(PageSize);

        return result;
    }

Что сейчас интересно: в этой реализации массив membersToMap игнорируется, а AutoMapperобъединяет ВСЕ навигационные таблицы, разрушая огромный SQL-запрос.Что я не понимаю: если я изменю Пейджинг на:

    public IQueryable<T> ApplyPaging2<T>(IQueryable<T> source)
    {
        if (!PagingEnabled)
        {
            return source;
        }

        var skippedEntries = (PageNumber.GetValueOrDefault(1) - 1) * PageSize;
        var result = source.Skip(skippedEntries).Take(PageSize);

        return result;
    }

и удаляю .AsQueryable, AutoMapper действительно выбирает только необходимые таблицы.Возможно, мне не хватает критической части головоломки, но, насколько я знаю, изменение типа времени компиляции с помощью AsQueryable не должно изменять никакого поведения, если базовый список уже является IQueryable.Таким образом, это проблема AutoMapper или я не использую возможность конвертировать из IQueryable в IEnumerable и обратно?

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