Создайте LambdaExpression, который содержит внешнюю переменную
Я хочу создать лямбду что-то вроде этого
user => user.Address == address
но не скомпилирован, хочу вернутьLambdaExpression
Если лямбда принять постоянную, как это
user => user.Age == 50
Тогда я могу использовать этот метод
public static LambdaExpression PropertyEqual(Type tEntityType, string propertyName, object value)
{
// entity => entity.PropName == const
var itemParameter = Expression.Parameter(tEntityType, "entity");
return Expression.Lambda
(
Expression.Equal
(
Expression.Property
(
itemParameter,
propertyName
),
Expression.Constant(value) // Tried to replace this with Expression.Parameter or Expression.Variable but no luck
),
new[] { itemParameter }
);
}
Как заставить этот метод принимать переменныеaddress
исходить из области только снаружи от лямбда-выражения?
var addressPropertyName = "Address";
var address = new Address() {...};
var q = Repo.GetQuery().Where(PropertyEqual(typeof(User), addressPropertyName, address))
Изменить: уточнить мой вопрос: Как правильно построитьExpression
сгенерировать первую лямбду?
Обновление: это невозможно, потому чтоEF не поддерживает нескалярную переменную
Я меняю лямбду наuser => user.AddressId == addressId
как предложеноВот, Это просто вопрос, как получитьAddressId
FKPropertyInfo
из известного свойства навигации.Address