2012-04-05 60 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