我有一个带有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语句的最佳方法是什么?
答案 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