我仍然在努力学习.net MVC,到目前为止,每个人都有所帮助,这位新手很欣赏。
当我提交表单时,用户可以选择仅在设置类别或子类别中进行搜索。现在我已经设置了表单,因此每个复选框都具有相同的名称,即:
<input type="checkbox" name="category" value="Category Name" />
当我将表单数据传递给控制器时,我读到我应该使用类似的东西:
string[] category
这将创建一个以逗号分隔的已检查值的数组。
现在当我到达控制器中的查询部分时,我首先检查数组是否为空或长度为0,即:
if ((category != null) || (category.Count() > 0))
现在我的问题是如何检查查询中的每个类别?含义如下:
var results = db.Employees.Join(db.Category, e => e.ID, c => c.EmployeeID, (e, c) => new { e = e, c = c }).Where(c => c.Name.Equals(category1) || c.Name.Equals(category2));
是否可以构建完整查询,例如在C#/ .Net MVC中构建字符串?
答案 0 :(得分:2)
当您计划搜索某个集合时,请为类别名称创建Hashset<string>
,如下所示:
var categoryHashset = new HashSet<string> {"","Category2",..,"CategoryN"};
Or
var categoryHashset = new HashSet<string>(CategoryList);
现在使用Contains方法检查,在这种情况下,它具有O(1)性能。当类别集合大小增加时,性能非常重要。
categoryHashset.Contains("Category1")
您的查询将变为:
var results = db.Employees.Join(db.Category, e => e.ID, c => c.EmployeeID, (e, c) => new { e = e, c = c })
.Where(c => categoryHashset.Contains(c.Name));
答案 1 :(得分:1)
您可以使用.Contains()
的{{1}}方法,以便针对每个类别检查名称是否包含在提供的类别列表中。
如果您在IEnumerable
数组中有类别,则可以将查询更新为:
category