2012-04-05 88 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 2012-04-05 13:23:48

+0

表示扩展方法为通用列表,我得到转换错误 – tobias 2012-04-05 13:25:02

+1

请发布错误... – jrummell 2012-04-05 13:25:12

回答

4

你需要像这样

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

它的工作丹尼尔,但为什么IEnumerable?有什么意义? – tobias 2012-04-05 13:46:09

+0

'List ' implements'IEnumerable '。它更linq的方式。 – 2012-04-05 13:52:46

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 2012-04-05 13:45:48

0

而且在其他的答案,你应该看看AutoMapper映射,并从entites的

+1

OP正在使用AutoMapper。 – jrummell 2012-04-05 13:33:06