C# 如何处理LINQ中where语句的条件规则
我有一个带有Dropbox的页面,Dropbox驱动向用户显示的任务集。我试图弄清楚如何根据linq中的语句使where语句有条件,因为与SQLCommand不同的是,您不能只在字符串中构建SQL,然后传递字符串。我尝试了以下方法,但实际上没有进行过滤,最终结果是列出了所有可能的任务: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
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语句如何使用的例子。谢谢你的澄清。