Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理LINQ中where语句的条件规则_C#_Asp.net Mvc_Linq - Fatal编程技术网

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

C# 如何处理LINQ中where语句的条件规则,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有一个带有Dropbox的页面,Dropbox驱动向用户显示的任务集。我试图弄清楚如何根据linq中的语句使where语句有条件,因为与SQLCommand不同的是,您不能只在字符串中构建SQL,然后传递字符串。我尝试了以下方法,但实际上没有进行过滤,最终结果是列出了所有可能的任务: public ActionResult UsersTasks(string UserID, int tasksType,int assignmentType) { IEnu

我有一个带有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);

    }
public ActionResult UsersTasks(字符串UserID、int tasksType、int assignmentType)
{
IEnumerable InitialPull=新UAC_用户[0];
IEnumerable apt_projecttasks=新的apt_projecttasks[0];
InitialPull=来自db.UAC_用户中的
其中a.User_ID==UserID.ToUpper()
选择一个;
UserID=InitialPull.First().User\u ID;
字符串MgrID=InitialPull.First().User\u ID\u Mgr;
apt\u projecttasks=来自db.apt\u projecttasks中的a
选择一个;
交换机(assignmentType)
{
案例0:
apt_projecttasks.Where(a=>a.AssignedUser_ID==UserID);
打破
案例1:
apt\u projecttasks.Where(a=>a.UAC\u Users\u AssignedUser.User\u ID\u Mgr==MgrID);
打破
案例2:
apt\u projecttasks.Where(a=>a.UAC\u Users\u AssignedUser.User\u ID\u Mgr==UserID);
打破
案例3:
apt_projecttasks.Where(a=>a.UAC_Users.User_ID==MgrID);
打破
}
开关(tasksType)
{
案例0:
apt|u projecttasks.Where(a=>(a.ActualStartDate!=null | | a.FirstTask==true)和&a.ActualFinishDate==null);
打破
案例1:
apt_projecttasks.Where(a=>a.ActualStartDate==null);
打破
案例2:
apt_projecttasks.Where(a=>a.ActualFinishDate!=null);
打破
}
长测试=apt_projecttasks.Count();
ViewBag.count=测试;
返回视图(apt_项目任务);
}

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

处理条件where语句的最佳方法是实际赋值

    apt_projecttasks = apt_projecttasks.Where(a => 
                     (a.ActualStartDate != null || a.FirstTask == true)
                     && a.ActualFinishDate == null);

事实上,您的案例正在发生,但他们没有将结果分配给任何事情。Linq不会对调用它的对象进行变异

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

    apt_projecttasks = apt_projecttasks.Where(a => 
                     (a.ActualStartDate != null || a.FirstTask == true)
                     && a.ActualFinishDate == null);

事实上,您的案例正在发生,但他们没有将结果分配给任何事情。Linq不会对调用它的对象进行变异

正如CDove在上面所说的,您没有分配您的值

若你们对where使用流畅的语法,我会质疑where本身之外的条件

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


i、 e.始终调用LINQ where方法

,正如上面CDove所说的,您没有赋值

若你们对where使用流畅的语法,我会质疑where本身之外的条件

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


i、 e.始终调用LINQ where方法

where
(与所有LINQ方法一样)返回另一个
IEnumerable
。Just it-
apt\u projecttasks=apt\u projecttasks.Where(…)
Where
(与所有LINQ方法一样)返回另一个
IEnumerable
。只是它-
apt\u projecttasks=apt\u projecttasks。我明白了,(…)
。我误解了我所看到的关于where语句如何使用的例子。谢谢你的澄清,我明白了。我误解了我所看到的关于where语句如何使用的例子。谢谢你的澄清。