2016-09-25 111 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表達式?有時我會想到但不確定何時使用,何時不使用它們?請說明什麼? –