В этом случае вы действительно используете несколько (типов) объектов в качестве источника?Из вашей заданной проблемы похоже, что ваш источник - это список пользователей - судя по «я хочу показать список пользователей с данными их компаний».
Если это так, то вы не можете этого сделатьнеявно вы можете использовать TypeConverter
для достаточно простого выполнения карты:
Mapper.CreateMap<ICollection<User>, UserCompanyViewModel>()
.ConvertUsing<UserCompanyViewModelConverter>();
Затем определите свой конвертер как:
public class UserCompanyViewModelConverter : ITypeConverter<ICollection<User>, UserCompanyViewModel>
{
public UserCompanyViewModel Convert(ResolutionContext context)
{
UserCompanyViewModel model = new UserCompanyViewModel();
ICollection<User> sourceUsers = (ICollection<User>)context.SourceValue;
model.Users = sourceUsers;
model.Companies = sourceUsers.Select(u => u.Company).Distinct().ToList();
return model;
}
}
Затем, когда вы хотите отобразить карту, вы просто берете свою коллекциюпользователей someUsers
и сопоставьте его:
UserCompanyViewModel model = Mapper.Map<ICollection<User>, UserCompanyViewModel>(someUsers);
Если вам действительно нужно сопоставить несколько типов источников в один тип назначения, похоже, что это сообщение в блоге содержит короткий помощниккласс, который поможет вам.Короче говоря, AutoMapper не совсем поддерживает это, поэтому вы будете делать пару запросов Map, чтобы заполнить вашу ViewModel.Вам нужно будет использовать другой TypeConverter
, чтобы убедиться, что второй вызов не заменит компании, добавленные первым.