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

Jac*_*ack 0 c# linq asp.net asp.net-mvc lambda

我具有以下ActionResult并检索以“ query”参数值开头的记录。但是,当查询值为空或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);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

好吧,有两个选择:

  • 有条件地适用以下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);
    
    Run Code Online (Sandbox Code Playgroud)
  • 将check放在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);
    
    Run Code Online (Sandbox Code Playgroud)