C# 是否可以使用反射从通用实体访问属性(按名称)?

C# 是否可以使用反射从通用实体访问属性(按名称)?,c#,generics,reflection,C#,Generics,Reflection,我想从泛型类T创建一个泛型查询。有没有一种方法可以使用反射或其他方法来实现类似的查询 public class DAO<T> where T : class { protected ObjectSet<T> Entities { get { return myContextThatIsInSomewhere.CreateObjectSet<T>();

我想从泛型类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();
    }
}
公共类DAO
T:在哪里上课
{
受保护的对象集实体
{
得到
{
返回myContextThatIsInSomewhere.CreateObjectSet();
}
}
公共IList SelectBy(对象字段)
{
如果(字段==null)
{
抛出新的ArgumentNullException(“字段”);
}
var query=来自此.Entities中的e
选择e;
foreach(fields.GetType().GetFields()中的变量字段)
{
query=来自此.Entities中的e
//这样做:
其中e.(field.Name)=field.GetValue()
选择e;
}
返回query.ToList();
}
}

Make
SelectBy
获取一个
表达式(称之为
谓词
),然后你可以说

var query = this.Entities.Where(predicate);
您可以通过以下方式传递
表达式的实例

x => x.Foo == foo
比如说