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

How to get variables from another controller

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

现在作业会计算停止作业的数量以及在哪个位置,如下所示

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();

    }

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

 ViewBag.HBAStopped = j.Stopped();

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

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

似乎每个停止计数之间的唯一区别是 LocationID。在这种情况下,您可以只创建一个方法来处理所有这些问题:

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

然后你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(1);

等...

只是旁注,我不会过分依赖幻数,例如

db.Jobs.Where(x => x.Status == "Stopped" && x.LocationID == 1).Count();

其中1有点模棱两可。首选枚举或静态常量,例如:

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

     // etc...
}

然后你可以这样做:

ViewBag.HBAStopped = GetStoppedCount(LocationConstants.HBAStop);

哪个更具可读性。

//1。创建结构:

  struct JobStops
{
    int HBAStop;
    int CRStop;
    int MAStop;
    int QCStop;
    int LTStop;
    int PTStop;
    int SPStop;

 }

//2- 像这样更新你的方法:

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

}

//3- ViewBag.HBAStopped = j.Stopped();