这是我的示例代码:
public SupportArticle Dropdown()
{
IRepository<Supportwife> iRepo = new GenericRepository<Supportwife>(_factory.ContextFactory);
var tp = iRepo.Get().Select(st => new SelectListItem()
{
Text = st.Name,
Value = st.TypeID.ToString(),
});
return tp;// here ,i am getting error while returning tp
}
错误是:
无法将system.collection.generic转换为cms.model.supportwife。
我想要的是:返回该功能,以便我可以使用我的控制器上的下拉功能。注意:这是服务层代码
Linq的Select()
方法总是返回IEnumerable<T>
。通过使用FirstOrDefault()
方法,您只能获得单个项目或null。
但是,即使你这样做 - 你的方法被声明为返回SupportArticle
,而你的Select
正在创建一个IEnumerable<SelectListItem>
- 在使用FirstOrDefault()
方法后,你留下了SelectListItem
类型的引用 - 除非该类型可以隐式转换为SupportArticle
,你仍会得到施法例外。
您需要更改方法的返回类型或更改您从iRepo
中选择的类型。
这样的事情可以让你到达你想去的地方:
public SelectListItem Dropdown()
{
var iRepo = new GenericRepository<Supportwife>(_factory.ContextFactory);
return iRepo.Get().Select(st => new SelectListItem()
{
Text = st.Name,
Value = st.TypeID.ToString(),
}).FirstOrDefault();
}
如果你希望你的方法返回一个List<SelectListItem>
,你只需要改变方法的返回类型和FirstOrDefault()
到ToList()
:(注意我不再使用iRepo
变量 - 它只是为了表明它可以像这样做也)
public List<SelectListItem> Dropdown()
{
return new GenericRepository<Supportwife>(_factory.ContextFactory)
.Get()
.Select(st => new SelectListItem()
{
Text = st.Name,
Value = st.TypeID.ToString(),
}).ToList();
}