如何处理LINQ中where语句的条件规则

时间:2018-02-09 18:56:59

标签: c# asp.net-mvc linq

我有一个带有Dropbox的页面,而Dropbox则会驱动向用户显示的任务集。我试图弄清楚如何根据linq中的那些语句使where语句有条件,因为与SQLCommand不同,你不能只是在字符串中构建SQL然后传递字符串。我尝试了以下内容,但过滤实际上没有发生,最终结果是所有可能任务的完整列表:

        public ActionResult UsersTasks(string UserID, int tasksType,int assignmentType)
    {
        IEnumerable<UAC_Users> InitialPull = new UAC_Users[0];
        IEnumerable<APT_ProjectTasks> apt_projecttasks = new APT_ProjectTasks[0];

        InitialPull = from a in db.UAC_Users
                      where a.User_ID == UserID.ToUpper() 
                      select a;

        UserID = InitialPull.First().User_ID;
        string MgrID = InitialPull.First().User_ID_Mgr;

        apt_projecttasks = from a in db.APT_ProjectTasks
                           select a;



        switch (assignmentType)
        {
            case 0:
                apt_projecttasks.Where(a => a.AssignedUser_ID == UserID);
                break;
            case 1:
                apt_projecttasks.Where(a => a.UAC_Users_AssignedUser.User_ID_Mgr == MgrID);
                break;
            case 2:
                apt_projecttasks.Where(a => a.UAC_Users_AssignedUser.User_ID_Mgr == UserID);
                break;
            case 3:
                apt_projecttasks.Where(a => a.UAC_Users.User_ID == MgrID);
                break;
        }

        switch (tasksType)
        {
            case 0:
                apt_projecttasks.Where(a => (a.ActualStartDate != null || a.FirstTask == true) && a.ActualFinishDate == null);
                break;
            case 1:
                apt_projecttasks.Where(a => a.ActualStartDate == null);
                break;
            case 2:
                apt_projecttasks.Where(a => a.ActualFinishDate != null);
                break;
        }

        long test = apt_projecttasks.Count();
        ViewBag.count = test;

        return View(apt_projecttasks);

    }

我认为这是因为我误解了枚举中“.where”的语法,但我不确定我现在最好的行动方式。在Linq中处理条件where语句的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

处理它的最佳方法是实际分配您的值。

myBicycle Bicycle ::= {
    bicycleColor "Blue",
    bicycleModel "Hero 42M"
}

person Person ::= {
    name "Rama Krishna",
    id "I123456",
    preferredVehicle bicycle : myBicycle
}

事实上,你的案件正在发生,但他们并未将结果分配给任何事情。 Linq并没有改变它所称的对象。

答案 1 :(得分:1)

正如上面提到的CDove你没有分配你的价值观。

如果你在哪里使用流利的语法,我会质疑那里的条件不在其中。

更好的方法(看法更具可读性)是调用where,使用内联lambda返回case conditonals或true为默认情况。或者甚至将这个业务逻辑抽象为函数。

即。始终调用LINQ where method