Мне нужно сгенерировать Expression из ViewModel, чтобы передать его в качестве предиката поиска для IQueryable.Where. Мне нужно иметь возможность включать/исключать параметры запроса на основе того, что предоставляет пользователь. Пример:
Код: Выделить всё
public class StoresFilter
{
public int[] Ids { get; set; }
[StringLength(150)]
public string Name { get; set; }
[StringLength(5)]
public string Abbreviation { get; set; }
[Display(Name = "Show all")]
public bool ShowAll { get; set; } = true;
public Expression ToExpression()
{
List expressions = new List();
if (Ids != null && Ids.Length > 0)
{
expressions.Add(x => Ids.Contains(x.Id));
}
if (Name.HasValue())
{
expressions.Add(x => x.Name.Contains(Name));
}
if (Abbreviation.HasValue())
{
expressions.Add(x => x.Abbreviation.Contains(Abbreviation));
}
if (!ShowAll)
{
expressions.Add(x => x.Enabled == true);
}
if (expressions.Count == 0)
{
return x => true;
}
// how to combine list of expressions into composite expression???
return compositeExpression;
}
}
Подробнее здесь: https://stackoverflow.com/questions/503 ... funct-bool
Мобильная версия