このようなラムダを作成したい
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
提案されているように、ラムダをに変更します。既知のナビゲーション プロパティからFKを取得する方法だけが問題です。AddressId
PropertyInfo
Address