2012-04-05 2 views
1

Это мой домен и просматривать классы:Общий метод расширения для общего Листа

public abstract class Entity : IEntity 
{ 
    [Key] 
    public virtual int Id { get; set; } 
} 

public class City:Entity 
{ 
    public string Code { get; set; } 
} 

public class BaseViewModel:IBaseViewModel 
{ 
    public int Id { get; set; } 
} 

public class CityModel:BaseViewModel 
{ 
    public string Code { get; set; } 
} 

Это мое расширение отображения:

public static TModel ToModel<TModel>(this IEntity entity) 
    where TModel : IBaseViewModel 
{ 
    return (TModel)Mapper.Map(entity, entity.GetType(), typeof(TModel)); 
} 

Это, как он используется:

City city = GetCity(); 
CityModel model = city.ToModel<CityModel>(); 

но для общих списков он не работает:

List<City> cities = GetCities(); 
List<CityModel> model =cities.ToModel<CityModel>() // doesn't work 

Можно ли написать метод расширения для общего списка?

+0

Что не работает? – jrummell

+0

что метод расширения для общего списка, я получил преобразования ошибки – tobias

+1

Пожалуйста вывесить ошибку ... – jrummell

ответ

4

Вам нужно будет что-то вроде этого

public static List<TModel> ToModel<TModel>(this IEnumerable<IEntity> entity) 
    where TModel : IBaseViewModel 
{ 
    // magic 
} 
+0

его работа Daniel, но почему IEnumerable? В чем смысл? – tobias

+0

'Список ' реализует 'IEnumerable '. Это более простой способ. –

1

Ваш метод расширения принимает единый объект и возвращает одну модель. Вам нужно будет добавить перегрузку для списков. Что-то вроде этого:

public static List<TModel> ToModel<TModel>(this List<IEntity> entityList) 
    where TModel : IBaseViewModel 
{ 
    return (List<TModel>)Mapper.Map(entityList, entityList.GetType(), typeof(List<TModel>)); 
} 
+0

не работает, igot же ошибка – tobias

0

Далее в другие ответы, вы должны смотреть на AutoMapper для отображения и из Entites

+1

OP использует AutoMapper. – jrummell

Смежные вопросы