2016-09-25 145 views
0

我有以下ActionResult并检索以“query”参数的值开头的记录。但是,当quesry值为空或null时,这些方法不会返回任何记录,但我想要检索所有这些记录。那么,是否必须使用if子句并创建不同的lambda子句,或者是否可以使用StartsWith检查查询参数并检索所有记录?使用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); 
} 
+0

你也可以使用'Where(m =>(m.Name ??“”)。StartsWith(query));' –

回答

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); 
    
+0

对IQueryable调用否'ToList()'或'ToArray() – Shyju

+1

@Shyju:呃,不...为什么需要这样?我希望'Json'调用只评估一次。 (除非这是我没有意识到的'Json'调用的某些限制...) –

+0

@JonSkeet非常感谢,我更喜欢第二种方法:)在ToList()和ToArray()方法之后lambda表达式?有时我会想到但不确定何时使用,何时不使用它们?请说明什么? –