2014-03-06 163 views
2
var filteredItemNumber = 0; 
     if (!string.IsNullOrEmpty(searchTerm)) 
     { 
      filteredItemNumber = 
       this._objectsRep.Find(
        r => 
        r.ObjectTitle.StartsWith(searchTerm) && r.CreatedDate >= timePeriod.Start 
        && r.CreatedDate <= timePeriod.End).Count(); 
     } 
     else 
     { 
      filteredItemNumber = 
       this._objectsRep.Find(t => t.CreatedDate >= timePeriod.Start && t.CreatedDate <= timePeriod.End) 
        .Count(); 
     } 

我確定必須有一個簡短的方法來擺脫if語句,但我不知道如何。當我使用下面的代碼時,過濾返回的結果與我期望的不同。也許括號不正確?有沒有更好的縮短這個LINQ語句的方法?

this._objectsRep.Find(r => 
       searchTerm == null || r.ObjectTitle.StartsWith(searchTerm) && r.CreatedDate >= timePeriod.Start 
       && r.CreatedDate <= timePeriod.End).Count() 

我想實現的是,如果serchTerm爲空或null就忽略這個過濾器,但只能使用的時間範圍。

感謝

+1

'List.Find'不是LINQ。 –

回答

3

你不需要List.Find它返回一個新的列表,你可以使用LINQ來算:

int filteredItemNumber = _objectsRep.Count(r => 
    (string.IsNullOrEmpty(searchTerm) || r.ObjectTitle.StartsWith(searchTerm)) 
    && r.CreatedDate >= timePeriod.Start 
    && r.CreatedDate <= timePeriod.End); 
1

我想你只需要包裹SEARCHTERM條件是這樣的:

this._objectsRep.Find(r => 
    (string.IsNullOrEmpty(searchTerm) || r.ObjectTitle.StartsWith(searchTerm)) 
    && r.CreatedDate >= timePeriod.Start 
    && r.CreatedDate <= timePeriod.End).Count() 
1
filteredItemNumber = 
       this._objectsRep.Find(
        r => 
        r.ObjectTitle.StartsWith(searchTerm??"") && r.CreatedDate >= timePeriod.Start 
        && r.CreatedDate <= timePeriod.End).Count(); 
相關問題