【发布时间】:2014-08-21 13:56:23
【问题描述】:
我正在开发一个 Asp.net MVC Razor 应用程序。 在我的应用程序视图中,我有一个过滤器栏,用户可以在其中输入过滤选项。
我想知道当用户输入多个城市作为“或”函数,以及当有多个邮政编码作为“与”函数时,是否有更简单的 linq 表达式。
例如:用户输入“纽约,蒙特利尔”,我必须检索这些城市的所有条目。
我有工作代码,但没有考虑用户是否会输入多个条目
代码:
string city = collection["city"]; // Default value = "City"
string postal = collection["postCode"]; // Default value = "Postal Code"
string skill = collection["skillSet"]; // Default value = ""
string category = collection["taskCategory"]; // Default value = ""
string viewall = collection["viewAll"]; // Default value = null, when clicked = "View all"
string status = collection["status"]; // Defualt Value = ""
if (city != "City")
{
ViewBag.city = city;
}
if (postal != "Postal Code")
{
ViewBag.postal = postal;
}
ViewBag.skill = skill;
ViewBag.category = category;
ViewBag.status = status;
var viewModel = new W6ViewModel();
// Default list for the Tasks nand Engineers
viewModel.engineers = db.W6ENGINEERS.OrderBy(n => n.Name).ToList();
viewModel.tasks = db.W6TASKS.ToList();
var keys = db.W6ENGINEERS.Select(v => v.W6Key).ToList();
var engSkills = db.W6ENGINEERS_SKILLS.Where(v => v.W6SKILLS.Name == skill).Select(k => k.W6Key).ToList();
//Filters for the Tasks & Engineer
if (viewall != "View all")
{
if (city != "City" && postal != "Postal Code" && category == "" && skill == "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city).Where(v => v.PostCode.Contains(postal)).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(w => w.City == city).Where(v => v.PostCode.Contains(postal)).ToList();
}
else if (city != "City" && postal != "Postal Code" && category == "" && skill == "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city).Where(v => v.PostCode.Contains(postal)).Where(s => s.W6TASK_STATUSES.Name == status).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(w => w.City == city).Where(v => v.PostCode.Contains(postal)).ToList();
}
else if (city != "City" && postal != "Postal Code" && category != "" && skill != "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city)
.Where(v => v.PostCode.Contains(postal))
.Where(c => c.W6TASKTYPECATEGORY.Name == category)
.ToList();
viewModel.engineers = db.W6ENGINEERS.Where(c => c.City == city).Where(p => p.PostCode.Contains(postal)).Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city != "City" && postal != "Postal Code" && category != "" && skill != "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city)
.Where(v => v.PostCode.Contains(postal))
.Where(c => c.W6TASKTYPECATEGORY.Name == category)
.Where(s => s.W6TASK_STATUSES.Name == status)
.ToList();
viewModel.engineers = db.W6ENGINEERS.Where(c => c.City == city).Where(p => p.PostCode.Contains(postal)).Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city == "City" && postal != "Postal Code" && category != "" && skill != "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(v => v.PostCode.Contains(postal))
.Where(c => c.W6TASKTYPECATEGORY.Name == category)
.ToList();
viewModel.engineers =
db.W6ENGINEERS.Where((p => p.PostCode.Contains(postal)))
.Where(k => engSkills.Contains(k.W6Key))
.ToList();
}
else if (city == "City" && postal != "Postal Code" && category != "" && skill != "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(v => v.PostCode.Contains(postal))
.Where(c => c.W6TASKTYPECATEGORY.Name == category)
.Where(s => s.W6TASK_STATUSES.Name == status)
.ToList();
viewModel.engineers =
db.W6ENGINEERS.Where((p => p.PostCode.Contains(postal)))
.Where(k => engSkills.Contains(k.W6Key))
.ToList();
}
else if (city != "City" && postal == "Postal Code" && category != "" && skill != "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city).Where(c => c.W6TASKTYPECATEGORY.Name == category).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(c => c.City == city).Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city != "City" && postal == "Postal Code" && category != "" && skill != "" && status != "")
{
viewModel.tasks =
db.W6TASKS
.Where(w => w.City == city).Where(c => c.W6TASKTYPECATEGORY.Name == category)
.Where(s => s.W6TASK_STATUSES.Name == status)
.ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(c => c.City == city).Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city != "City" && postal == "Postal Code" && category == "" && skill == "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(w => w.City == city).ToList();
}
else if (city != "City" && postal == "Postal Code" && category == "" && skill == "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(w => w.City == city).Where(s => s.W6TASK_STATUSES.Name == status).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(w => w.City == city).ToList();
}
else if (city == "City" && postal != "Postal Code" && category == "" && skill == "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(v => v.PostCode.Contains(postal)).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(v => v.PostCode.Contains(postal)).ToList();
}
else if (city == "City" && postal != "Postal Code" && category == "" && skill == "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(v => v.PostCode.Contains(postal)).Where(s => s.W6TASK_STATUSES.Name == status).ToList();
viewModel.engineers =
db.W6ENGINEERS.Where(v => v.PostCode.Contains(postal)).ToList();
}
else if (city == "City" && postal == "Postal Code" && category != "" && skill != "" && status == "")
{
viewModel.tasks =
db.W6TASKS.Where(c => c.W6TASKTYPECATEGORY.Name == category).ToList();
viewModel.engineers = db.W6ENGINEERS.Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city == "City" && postal == "Postal Code" && category != "" && skill != "" && status != "")
{
viewModel.tasks =
db.W6TASKS.Where(c => c.W6TASKTYPECATEGORY.Name == category).Where(s => s.W6TASK_STATUSES.Name == status).ToList();
viewModel.engineers = db.W6ENGINEERS.Where(k => engSkills.Contains(k.W6Key)).ToList();
}
else if (city == "City" && postal == "Postal Code" && category == "" && skill != "" && status == "")
viewModel.engineers = db.W6ENGINEERS.Where(k => engSkills.Contains(k.W6Key)).ToList();
else if (city == "City" && postal == "Postal Code" && category == "" && skill != "" && status != "")
{
viewModel.engineers = db.W6ENGINEERS.Where(k => engSkills.Contains(k.W6Key)).ToList();
viewModel.tasks = db.W6TASKS.Where(s => s.W6TASK_STATUSES.Name == status).ToList();
}
else if (city == "City" && postal == "Postal Code" && category != "" && skill == "" && status == "")
viewModel.tasks = db.W6TASKS.Where(c => c.W6TASKTYPECATEGORY.Name == category).ToList();
else if (city == "City" && postal == "Postal Code" && category != "" && skill == "" && status != "")
{
viewModel.tasks = db.W6TASKS
.Where(c => c.W6TASKTYPECATEGORY.Name == category)
.Where(s => s.W6TASK_STATUSES.Name == status)
.ToList();
}
else if(city == "City" && postal == "Postal Code" && category == "" && skill == "" && status != "")
{
viewModel.tasks = db.W6TASKS.Where(s => s.W6TASK_STATUSES.Name == status).ToList();
}
}
感谢您的帮助。
【问题讨论】:
-
您的问题不清楚是要处理逗号还是处理
or。无论如何,我认为你应该看看expression trees -
处理“或”以及“和”谢谢我看看你的链接
标签: c# asp.net asp.net-mvc linq asp.net-mvc-4