使用反射,能否通过属性名称从通用实体中访问属性?

4
我想从一个通用类T创建一个通用查询。是否有一种方法可以使用反射或其他方式做到这一点?
public class DAO<T>        
    where T : class
{
    protected ObjectSet<T> Entities
    {
        get
        {
            return myContextThatIsInSomewhere.CreateObjectSet<T>();
        }
    }

    public IList<T> SelectBy(object fields)
    {
        if (fields == null)
        {
            throw new ArgumentNullException("fields");
        }

        var query = from e in this.Entities                    
                    select e;

        foreach (var field in fields.GetType().GetFields())
        {
            query = from e in this.Entities
                    // Do something like that:                   
                    where e.(field.Name) == field.GetValue()
                    select e;         
        }

        return query.ToList();
    }
}
1个回答

3

SelectBy 改为接受一个名为 predicateExpression<Func<T, bool>> 参数,然后你就可以这样使用:

var query = this.Entities.Where(predicate);

您可以通过以下方式传递一个 Expression<Func<T, bool>> 的实例:
x => x.Foo == foo

例如。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接