如何从另一个控制器获取变量

Mat*_*093 0 c# asp.net-mvc controller asp.net-mvc-4

我有两个控制器:工作和家庭

现在,job计算已停止的作业数量以及下面的位置

public void Stopped()
    {

        int HBAStop = db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();
        int CRStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 2).Count();
        int MAStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 3).Count();
        int QCStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 4).Count();
        int LTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 5).Count();
        int PTStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 6).Count();
        int SPStop =  db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 7).Count();

    }
Run Code Online (Sandbox Code Playgroud)

然后我想在家庭控制器中初始化作业控制器并从stopped()方法中获取各个变量,如下所示

 ViewBag.HBAStopped = j.Stopped();
Run Code Online (Sandbox Code Playgroud)

如何将HBAStop变量添加到viewbag?我可以通过将它们变成每个返回方法来解决所有这些问题,但这相当于大约30种方法,并且看起来有点矫枉过正.我尝试了各种方法但没有成功,返回方法是目前唯一的选择

如果需要,我可以提供更多信息,谢谢

DGi*_*bbs 5

似乎每个停止计数之间的唯一区别是LocationID.在这种情况下,您可以只使用一个方法来处理它们:

public int GetStoppedCount(int locationId)
{
     return db.Jobs.Where(x => x.Status == "Stopped" 
            && x.LocationID == locationId).Count();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(1);
Run Code Online (Sandbox Code Playgroud)

等等...

只是旁注,我不会太依赖魔术数字,例如

db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();
Run Code Online (Sandbox Code Playgroud)

哪里1有点暧昧.首选枚举或静态常量,例如:

public static class LocationConstants
{
     public const int HBAStop = 1;
     public const int CRStop = 2;

     // etc...
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(LocationConstants.HBAStop);
Run Code Online (Sandbox Code Playgroud)

哪个更具可读性.

  • @ataravati你能解释一下它是如何回答这个问题的吗?OP刚刚表示确实如此. (2认同)