Я пытаюсь создать динамический фильтр, используя комбинацию лямбда-функций. Но количество лямбда-функций может варьироваться в зависимости от количества различных фильтров, которые применяет пользователь.
Я хочу что-то подобное
//images is a List<ImageInfo>
var result1 = images
.Where(image => image.Bytes < 1000)
.Where(image => image.Height < 100)
.Where(image => image.Width < 100);
Где фильтр высоты применяется только к тем изображениям, которые проходят фильтр байтов. А фильтр ширины применяется только к тем изображениям, которые проходят фильтр высоты.
Но динамический способ включения и выключения фильтров пользователями не позволяет мне создавать одну лямбда-функцию.
Вместо этого я создам список лямбда-функций, а затем должен применить их к списку изображений. Так что я бы закончил с чем-то вроде этого; несколько отдельных лямбда-функций.
var filter1 = images.Where(image => image.Bytes < 1000);
var filter2 = images.Where(image => image.Height < 100);
var filter3 = images.Where(image => image.Width < 100);
Как я могу объединить несколько лямбда-функций вместе, чтобы получить мой окончательный список отфильтрованных изображений?
Я сделал это
var result = filter1.Intersect<ImageInfo>(filter2).Intersect<ImageInfo>(filter3);
Но каждый фильтр просматривает основной список изображений, чтобы получить его подмножество изображений, а затем выполняет вычисление пересечений, которое отнимает слишком много ресурсов ЦП.
Итак, я ищу способ взять произвольный список лямбда-функций (выражений ... чего угодно) и соединить их способом, который выполняется так, как это делает первый показанный мной пример.