2014-03-06 90 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(); 
相关问题