Использование тернарного оператора в лямбде, где условие - PullRequest
0 голосов
/ 11 июля 2020

Вот как я получаю свои данные с помощью лямбда-выражения linq.

var data = await _repo.GetAll().where(x => x.isDeleted = false).CountAsync();

И я также хочу фильтровать свои данные с помощью _date.

bool filterWithDate = false;  
var _date = DateTime.Now.AddDays(-7);

filterWithDate будет передано по параметру метода и его динамику c. Если это true, я хочу фильтровать по _date, если false, я получу все данные. Я могу проверить здесь с помощью if(filterWithDate), но я просто хочу отфильтровать условие linq where с помощью тернарного оператора, чтобы упростить мой код.

var data = await _repo.GetAll().  
where(x => x.isDeleted = false 
&& (filterWithDate) ? x.date >= _date : ??? ).CountAsync();

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Хотя я согласен с комментариями к вопросу, а также с ответом от @Bosco, если вы все еще хотите go с изменением одной строки, вы можете попробовать это ...

var data = await _repo.GetAll().  
    Where(x => !x.isDeleted && (!filterWithDate || x.date >= _date)).CountAsync();
0 голосов
/ 11 июля 2020

Как указано в комментарии,

Вместо этого вы можете использовать две строки и по-прежнему использовать тернарный оператор

var data = filterWithDate ? 
               await _repo.GetAll().Where(x => x.isDeleted = false && x.date >= _date).CountAsync() : 
               await _repo.GetAll().Where(x => x.isDeleted = false).CountAsync();

Или вы go полный оператор if

if(filterWithDate)
    await _repo.GetAll().Where(x => x.isDeleted = false && x.date >= _date).CountAsync();
else
    await _repo.GetAll().Where(x => x.isDeleted = false).CountAsync();

Это избавит вас от лишних размышлений

...