获取从数据库中的所有用户名的列表中MVC 4
问题描述:
我有这样的控制器:获取从数据库中的所有用户名的列表中MVC 4
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());
我觉得有另一种方式我可以做到这一点,而不必这样做。因为我的思维过程是,如果搜索需要更复杂的话。他们可能不会输入用户名,但他们可以输入他们正在寻找的日期,反之亦然。如果没有它,那么我就无法真正做到超级混乱。任何帮助真的会很感激!
答
您可以添加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);
答
如果你计划在将来创造更多的搜索领域,你将要设置您的查询,以适应不重构。这里是一个常用的方法:
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);
设置你的方法一样,这是很容易跟随,当添加新的搜索标准扩展,并将得到的查询只包括由用户输入的参数。
如果您使用的是实体框架,默认情况下'IQueryable'被懒惰地评估,使它们可组合。因此,您可以使用多个条件语句逐步向查询引入过滤器。完成后,只需通过调用“ToList”(或枚举结果并转换为模型)来评估查询并将结果集合返回到视图。 –