我想创建像这样的 lambda
user => user.Address == address
但不是编译一个,我要返回LambdaExpression
如果 lambda 像这样保持不变
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
来自 lambda 表达式之外的范围?
var addressPropertyName = "Address";
var address = new Address() {...};
var q = Repo.GetQuery().Where(PropertyEqual(typeof(User), addressPropertyName, address))
编辑:澄清我的问题:如何建立Expression
生成第一个 lambda 的权利?
更新:这是不可能的,因为EF 不支持非标量变量
我将 lambda 更改为这里user => user.AddressId == addressId
建议的。这只是如何从已知的导航属性中获取FK的问题。AddressId
PropertyInfo
Address