如果不为null

时间:2017-04-03 17:32:00

标签: c# asp.net-mvc linq

我仍然在努力学习.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中构建字符串?

2 个答案:

答案 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