私はこれしか考えられません(2つの一般的な引数があります)
public static IEnumerable<TModel> Search<TModel, TValue>(
Expression<Func<TModel, TValue>> expression,
TValue value
)
{
return new List<TModel>();
}
利用方法
var result = Search<EntityType, int>(x => x.Id, 1);
var result2 = Search<EntityType, string>(x => x.Name, "The name");
TValue をオブジェクトに置き換えて、2 番目のジェネリック引数を回避できますが、私はこれに固執します。
ところで。これは、この小さなヘルパーと組み合わせてうまく機能します
public static class ExpressionHelpers
{
public static string MemberName<T, V>(this Expression<Func<T, V>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression == null)
throw new InvalidOperationException("Expression must be a member expression");
return memberExpression.Member.Name;
}
}
この例では、プロパティの名前 (ID または名前) を呼び出すことで取得できます。
var name = expression.MemberName();