使用Lambda StartsWith()检索所有记录

时间:2016-09-25 17:08:59

标签: c# asp.net asp.net-mvc linq lambda

我有以下ActionResult并检索以" query"开头的记录参数的值。但是,当quesry值为空或null时,方法返回没有记录,而我想要检索所有这些。那么,我是否必须使用if子句并创建不同的lambda子句,或者是否可以使用StartsWith检查查询参数并检索所有记录?

public ActionResult StudentLookup(string query)
{
    var students = repository.Students.Select(m => new StudentViewModel
    {
        Id = m.Id,
        Name = m.Name
    })
    .Where(m => m.Name.StartsWith(query));
    return Json(students, JsonRequestBehavior.AllowGet);
}

1 个答案:

答案 0 :(得分:4)

嗯,有两个选择:

  • 有条件地应用Where子句:

    IQuerable<StudentModel> students = repository.Students.Select(m => new StudentViewModel
    {
        Id = m.Id,
        Name = m.Name
    });
    if (!string.IsNullOrEmpty(query))
    {
         students= students.Where(m => m.Name.StartsWith(query));
    }
    return Json(students, JsonRequestBehavior.AllowGet);
    
  • 将检查放入Where子句本身:

    var students = repository.Students.Select(m => new StudentViewModel
    {
        Id = m.Id,
        Name = m.Name
    })
    .Where(m => string.IsNullOrEmpty(query) || m.Name.StartsWith(query));
    return Json(students, JsonRequestBehavior.AllowGet);