如何将此代码转换为服务模式?

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

这是我的代码:

        [HttpGet]
    public ActionResult GetCategor(int catId)
    {
      using (uuEntities ems = new uuEntities())
      {
        return Json(ems.SupportSubCats.Where(x => x.CatID == catId).Select(
        x => new
        {
          SubId = x.SubCatID,
          SUbName = x.SubCatName
        }).ToList(), JsonRequestBehavior.AllowGet);
      }
    }

我尝试过的:

在控制器中:

   [HttpGet]
    public ActionResult GetCategor(int catId)
    {
        return Json(_service.List(int catId), JsonRequestBehavior.AllowGet);
      }
    } 

在服务中:

    public void List(int catId)
    {
      return new GenericRepository<SupportSubCategory>(_factory.ContextFactory)
        .Get(filter: (x => x.CatID == catId))
        .Select(x => new
        {
          SubId = x.SubCatID,
          SUbName = x.SubCatName
        }).ToList();
    }

我认为我的退货类型不正确请告诉我解决方案。在公共空白附近,我收到一个错误,无效无法返回列表。

.net model-view-controller service
1个回答
1
投票

void方法不会向其调用者返回任何值。你可以在return方法中使用空的void只退出方法 - 但是你不能返回任何值。

此代码完全有效,并广泛用作常见做法:

public void DoSomething()
{
    if(<someCondition>)
    {
        return;
    }
    // The rest of the code will only be executed if <someCondition> evalualtes to false
}

通常,在将参数传递给方法时需要使用此模式,并且需要在实际执行方法的其余部分之前对其进行验证。

但是,此代码无效且无法编译:

public void DoSomething()
{
    if(<someCondition>)
    {
        return false; // Here is your compiler error...
    }
    // The rest of the code will only be executed if <someCondition> evalualtes to false
}

在评论中我们的对话之后,您应该创建一个类来保存Select的结果而不是使用匿名类型,并从您的方法返回该类的列表:

// Note: I've renamed your method to something a little bit more meaningful
public List<SubDetails> ListSubDetails(int catId) 
{
  return new GenericRepository<SupportSubCategory>(_factory.ContextFactory)
    .Get(filter: (x => x.CatID == catId))
    .Select(x => new SubDetails()
    {
      SubId = x.SubCatID,
      SUbName = x.SubCatName
    }).ToList();
}

...

public class SubDetails
{
    public Int SubId {get; set;} // I'm guessing int here...
    public string SUbName {get; set;} // I'm guessing string here...
 }
© www.soinside.com 2019 - 2024. All rights reserved.