我有这个控制器:
public ActionResult NameSearch(SearchModel userSearch)
{
if (ModelState.IsValid)
{
var db = new reviewlogsEntities();
return View(db.logrecords.Where(m => m.username == userSearch.userName).ToList());
}
return RedirectToAction("index", "home");
}
我的问题是,当前正在搜索日志的用户在拥有用户名后会查找用户名,他们可以输出列表。我现在遇到的问题是,如果他们没有输入用户名,我的要求是什么。应该发生的是所有用户及其日志应该出现。我可以做一个if语句,说明如果留空只做
return View(db.logrecords.ToList());
我觉得还有另一种方法可以做到,而不必这样做。因为我的思维过程是,如果搜索需要更复杂,该怎么办?如果他们可能没有输入用户名,但他们可以输入他们专门寻找的日期,反之亦然。如果声明没有它超级凌乱,我真的无法做到。真的很感激任何帮助!
答案 0 :(得分:4)
您可以根据需要添加if条件并对logrecords dbset执行更多过滤。
假设db
是DbContext的对象,而db.logrecords
的类型为DbSet<LogRecord>
IQueryable<LogRecord> recordsDbSet = db.logrecords;
if(!String.IsNullOrEmpty(userSearch.UserName))
{
recordsDbSet = recordsDbSet.Where(m => m.username == userSearch.userName)
}
var resultList = recordsDbSet.ToList();
return View(resultList);
答案 1 :(得分:0)
如果您计划将来创建更多搜索字段,则需要设置查询以适应该搜索字段而不进行重构。这是一种常见的方法:
var searchResults = db.logresults.AsQueryable();
//User Name
if (userSearch.username != string.empty)
searchResults = searchResults.Where(l => l.username == userSearch.username);
//From Date
if (userSearch.FromDate != DateTime.MinValue)
searchResults = searchResults.Where(l => l.CreatedDate >= userSearch.FromDate);
//To Date
if (userSearch.ToDate != DateTime.MinValue)
searchResults = searchResults.Where(l => l.CreatedDate <= userSearch.ToDate);
//Category (because logs always end up categorized)
if (userSearch.Category != LogCategories.All) //assuming enum here
searchResults = searchResults.Where(l => l.Category == userSearch.Category);
在添加新的搜索条件时,设置这样的方法很容易理解和扩展,结果查询只包含用户输入的参数。