这是我的代码:
[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();
}
我认为我的退货类型不正确请告诉我解决方法。在公共空白附近,我收到一个错误,无效无法返回列表。
答案 0 :(得分: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...
}