В настоящее время я использую 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 и обратно?