0

我不知道如何IEnumerable<T>根据特定的属性值获取通用方法。这是我的代码:

public List<T> ReadByProperty<T>(string propName, object propValue)
    where T : class
{
    return base.repository.Query<T>().AsEnumerable()
               .Where(x => x.GetType()
                      .GetProperty(propName)
                      .GetValue(x, null) == propValue)
               .ToList();
}

这是非泛型方法中的类似代码:

return base.repository.Query<Models.Role>().Where(w => w.UserId == 2).ToList();
4

1 回答 1

2

您需要手动构建一个表达式并将其传递给Where

var paramExpr = Expression.Parameter(typeof(T));
var propExpr = Expression.Property(paramExpr, propName);
var eqExpr = Expression.Equal(propExpr, Expression.Constant(propValue));
var predicate = Expression.Lambda<Func<T, bool>>(eqExpr, paramExpr);

return base.repository.Query<T>()
           .Where(predicate).ToList();
于 2013-10-13T12:03:55.800 回答