Вы конфигурируете CreateMap<IList<AccountSubscription>, IList<AccountSubscriptionDto>>
, но вам нужно _mapper.Map<IPagedList<AccountSubscriptionDto>>
попытаться настроить CreateMap<IPagedList<AccountSubscription>, IPagedList<AccountSubscriptionDto>>
, например,
CreateMap<IPagedList<AccountSubscription>, IPagedList<AccountSubscriptionDto>>()
.ConstructUsing(source => source.Items.GroupBy(g => new { g.CustomerNumber })
.Select(s => new AccountSubscriptionDto
{
CustomerNumber = s.Key.CustomerNumber,
AccountList = s.Select(t => t.AccountNumber).ToList()
}).ToPagedList(source.PageIndex, source.PageSize, source.IndexFrom)
);
. Но для этого размера размер страницы будет что вы группируете по исходным данным.
В общем, вы должны сгруппировать по источникам данных до ToPagedList
. Вы можете сначала рассмотреть запрос и группу AccountSubscription
, а затем позвонить ToPagedList
.
Так как Вы также попросили объяснение
transform_iterator
потребности знать тип возврата функции, вызванной для инстанцирования себя. Это определяется через result_of
(найденный в <boost/utility/result_of.hpp>
При использовании функционального объекта необходимо определить участника result_type
указывать тип результата объекта. (так как объект не имеет 'типа возврата' как таковым),
Если Вы использовали бы регулярную функцию, result_of
смог бы понять это самостоятельно, например:
template <typename K, typename V>
const V & get_value(std::pair<K, V> const & p) { return p.second; }
class test
{
typedef map<int, float> TMap;
TMap mymap;
public:
typedef boost::function< const TMap::mapped_type & (const TMap::value_type &) > F;
typedef boost::transform_iterator<F, TMap::iterator> transform_iterator;
transform_iterator begin()
{
return boost::make_transform_iterator(mymap.begin(), &get_value< int, float >);
}
};
Необходимо будет наследоваться get_value
от unary_function<const V&, std::pair<K, V> const&>
сказать transform_iterator
что подпись get_value
.