2013-04-03 75 views
1

我不是很熟悉linq,我試圖消除在我的代碼中重複一堆linq查詢的需要。我希望如果字符串description的值爲空或空,我可以修改此linq查詢以返回整頁結果。目前它在該場景中不返回結果。Linq查詢,返回所有記錄,如果搜索項目爲空或空

所以基本上我想這個查詢...

return _entities.Schedules.Where(s => s.Description.ToLower().Contains(description.ToLower()))) 
         .OrderByWithDirection(x => x.Description, dir) 
         .Skip((pageNumber - 1) * pageSize) 
         .Take(pageSize) 
         .ToList(); 

...也返回結果,這個查詢將如果description爲空。

return _entities.Schedules.OrderByWithDirection(x => x.Description, dir) 
          .Skip((pageNumber - 1) * pageSize) 
          .Take(pageSize) 
          .ToList(); 

回答

5

LINQ是組合的,所以你可以很簡單地做到這一點:

IQueryable<Schedule> results = _entities.Schedules; 

// Only filter on description if a search term has been given 
if (!string.IsNullOrEmpty(description)) { 
    results = results.Where(s => 
        s.Description.ToLower().Contains(description.ToLower()))) 
} 

return results.OrderByWithDirection(x => x.Description, dir) 
       .Skip((pageNumber - 1) * pageSize) 
       .Take(pageSize) 
       .ToList(); 
+0

是啊,這就是我現在做什麼,但所有不同的過濾和排序我會做的代碼將嵌套if和switch語句,我試圖儘可能避免如果可能。 – Splendor 2013-04-04 14:34:26

+1

@Splendor:如果它最終只是代碼需要重構的混亂。例如,你可以將'if'拉出來寫入一個方法並寫出'results.FilterByDescription(description).OrderBy ...'。如果您需要*複雜的決策邏輯來滿足您的需求,我不會看到如何將所有內容填充到單個語句中,從而使代碼更易於閱讀。 – Jon 2013-04-04 14:51:04

+0

我最初誤解了你的答案。你用這個把我的想法弄糊塗了。謝謝! – Splendor 2013-04-04 20:01:00