从数据库获取所有用户名到MVC 4中的列表

时间:2016-01-21 17:01:17

标签: c# asp.net-mvc database asp.net-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());

我觉得还有另一种方法可以做到,而不必这样做。因为我的思维过程是,如果搜索需要更复杂,该怎么办?如果他们可能没有输入用户名,但他们可以输入他们专门寻找的日期,反之亦然。如果声明没有它超级凌乱,我真的无法做到。真的很感激任何帮助!

2 个答案:

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

在添加新的搜索条件时,设置这样的方法很容易理解和扩展,结果查询只包含用户输入的参数。