2012-01-24 22 views
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(); 
    } 
} 

回答

3

SelectBy采取Expression<Func<T, bool>>(称之为predicate),然后你就可以说,说

x => x.Foo == foo 

例如

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

可以传递的Expression<Func<T, bool>>一个实例。

+0

谢谢贾森! –

相关问题