Как упростить код с lambda-операциями?

В зависимости от некоего условия нужно составить lambda expression. Как сделать проще, чтобы код был изящнее.
В примере, в зависимости от наличия значения в UserId используются разные лябда-выражения для фильтра запроса:
public CatalogModel GetListCatalogModels(int? userId)
{
	Expression<Func<Catalog, bool>> filter1 = x => x.IsPublished;
	Expression<Func<Catalog, bool>> filter2 = x => x.UserPtr == userId && x.IsPublished;
	Expression<Func<Catalog, bool>> filter;
	if (userId == null)
		filter = filter1;
	else
		filter = filter2;
	...


Не очень силен в лямбда-синтаксисте, но полагаю, что это может быть изящнее...
  • Вопрос задан
  • 186 просмотров
Решения вопроса 2
DmitryITWorksMakarov
@DmitryITWorksMakarov
Expression<Func<Catalog, bool>> filter = x => (userId==null || x.UserPtr == userId) && x.IsPublished;
Ответ написан
@dmitryKovalskiy
программист средней руки
1)
правильно не 
if (userId == null)
    filter = filter1;
а
if (userId.hasValue)
    filter = filter1;

2)
filter = userId.hasValue? filter1 : filter2;
3)
filter = x => userId.hasValue?x.UserPtr == userId.Value && x.IsPublished : x.IsPublished

4)
filter = x =>  x.IsPublished && (userId.hasValue?x.UserPtr == userId.Value : true)

какой нибудь способ да сработает
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artem_b89
@artem_b89
Сетевой бездельник
Есть очень хороший пример, который когда-то сподвиг меня посмотреть в сторону expressions. m.habrahabr.ru/post/83169
Все что вам требуется, можно узнать там. А дальше msdn, так как по данной теме информации мало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы