Я хочу объединить несколько разделенных лямбда-выражений и построить их одно окончательное выражение.
примеры классов:
class Address {
public string city { get; set; }
public string country { get; set; }
}
class ClassA {
public int Id { get; set; }
public Address address { get; set; }
}
class ClassB {
public int Id { get; set; }
public ClassA objectA { get; set; }
}
каждый класс имеет одно лямбда-выражение:
Expression<Func<ClassA,bool>> classARule = a =>
a.Id > 1 && a.address.city == "city1" || a.address.country == "us"
Expression<Func<ClassB,bool>> classBRule = b => b.Id == 100
, поскольку ClassB
имеет одно свойство ClassA
, можно создать выражение с обоими условиями. пример:
// I want to create this expected object at runtime using classARule and classBRule
Expression<Func<ClassB,bool>> expected = b =>
(b.Id == 100) &&
(b.objectA.Id > 1 && b.objectA.address.city == "city1" || b.objectA.address.country == "us")
если я хочу сгенерировать ожидаемое выражение во время выполнения, я должен каким-то образом преобразовать a
параметр classARule
в b.objectA
проблема в том, что я знаю, как объединить два выражения, но я не знаю, как заменить параметр a
другим объектом. в этом случае b.objectA
Обновление - чтобы избежать путаницы
цель состоит в достижении Expression<Func<ClassB,bool>> expected
выражения во время выполнения с использованием classARule
и classBRule