我没有得到如何使用通用模式在服务层中“返回”

问题描述 投票:0回答:1

这是我的示例代码:

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。

我想要的是:返回该功能,以便我可以使用我的控制器上的下拉功能。注意:这是服务层代码

c# generics model-view-controller service
1个回答
1
投票

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.