LINQ Where(),如果需要获取所有内容该怎么办?

时间:2011-06-07 17:24:36

标签: linq c#-4.0

考虑下一个例子:

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正文Where()为空,我可以摆脱空检查部分并获取所有成分。我们怎么做?此外,任何其他改进此代码的建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

试试这个:您可以将where子句视为if语句。

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

(假设x.Id的类型为int?

答案 1 :(得分:1)

试试这个:

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