Оказывается, что AutoMapper иногда автоматически добавляет ToList
/ ToArray
к выражению проекции при отображении перечислимых типов, иногда нет.
Правило выглядит так:следующим образом.Если перечислимый тип назначения может быть напрямую назначен из исходного типа выражения, AutoMapper использует непосредственно исходное выражение.Другими словами, если следующее присваивание допустимо (псевдокод):
dst.Member = src.Expression;
В этом случае вы должны включить ToList
или не включить в выражение отображения (таким образом, согласитесь на EF)Оптимизация коррелированных запросов ядра).
Во всех остальных случаях AutoMapper при необходимости выполняет сопоставление перечислимых элементов, а затем добавляет либо ToArray
, либо ToList
.Отказ от участия невозможен.
Вскоре, если целевой перечислимый тип элемента, если Dto (требует сопоставления), не включает ToList
в исходное выражение LINQ, если онотип примитива или сущности, do include ToList
, чтобы избежать N + 1 запросов.Все это применимо, если тип целевой коллекции IEnumerable<T>
.Любой другой производный тип коллекции, например IReadOnlyCollection<T>
, IReadOnlyList<T>
, ICollection<T>
, IList<T>
, List<T>
, T[]
и т. Д., Будет автоматически обрабатываться AutoMapper в случае, если исходное выражение возвращает IEnumerable<TSource>
.