Ответ 1
В этом случае, действительно ли вы используете несколько (типы) объектов в качестве источника? Похоже, что из вашей определенной проблемы ваш источник - это список пользователей - судя по "Я хочу показать список пользователей с их данными о компании".
Если это так, в то время как вы не можете сделать это неявно, вы можете использовать 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 не совсем поддерживает это, поэтому вы будете делать пару запросов на карту, чтобы заполнить ViewModel. Вам нужно будет использовать другой TypeConverter
, чтобы убедиться, что второй вызов не заменяет Компании, добавленные первым.