LINQ Где (), что делать, если мне нужно все получить? - PullRequest
1 голос
/ 07 июня 2011

Рассмотрим следующий пример:

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 ]

2 голосов
/ 07 июня 2011

Попробуйте это: вы можете думать о предложении where как о if.

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

(Предполагается, что x.Id также имеет тип int?)

1 голос
/ 07 июня 2011

Попробуйте это:

var preSelect = 
    _dataContext
    .Ingredients
    .Where
    (
        x=> (!ingredientId.HasValue || x.Id == ingredientId)
    )
    .SelectMany(x=>x.Allergies.AsQueryable());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...