考虑下一个例子:
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()
为空,我可以摆脱空检查部分并获取所有成分。我们怎么做?此外,任何其他改进此代码的建议都将受到赞赏。
答案 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());