2011-06-07 32 views
1

考慮下面的例子:LINQ Where(),如果我需要獲取所有內容,該怎麼辦?

public List<Allergy> GetAllergies(int? ingredientId = null) 
{ 
    var allergies = new List<Allergy>(); 

    var preSelect = ingredientId != null 
    ? _dataContext.Ingredients.Where(x=> x.Id == ingredientId).SelectMany(x=>x.Allergies.AsQueryable()) 
    : _dataContext.Allergies.AsQueryable(); 

    preSelect.ToList().ForEach(x => 
    { 
     var a = Mapper.Map<Database.Allergy, Allergy>(x); 
     allergies.Add(a); 
    }); 

    return allergies; 
} 

這一工程,但我相信這是可能擺脫空檢查的一部分,並得到所有成分,如果ingredientId爲null正確的,在Where()體。我們怎麼做到這一點?還有任何其他建議,以改善這段代碼將不勝感激。

回答

1

嘗試這種情況:

var preSelect = 
    _dataContext 
    .Ingredients 
    .Where 
    (
     x=> (!ingredientId.HasValue || x.Id == ingredientId) 
    ) 
    .SelectMany(x=>x.Allergies.AsQueryable()); 
2

試試這個:你可以把where子句看作if語句。

_dataContext.Ingredients.Where(x => x.Id != null && x.Id == ingredientId) 

(假設x.Idint?類型的也)

+0

'X => x.Id == NULL || x.Id == ingredientId'或'x =>!(x.Id!= null && x.Id!= ingredientId)'我會想。 (我添加了第二種形式,因爲Resharper有時會抱怨第一種,呵呵。) – 2011-06-07 17:38:37

相關問題