2012-01-24 4 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

SelectByExpression<Func<T, bool>>を取る(predicateそれを呼び出す)、その後、あなただけのあなたが例えば

x => x.Foo == foo 

を言ってExpression<Func<T, bool>>のインスタンスを渡すことができ

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

を言うことができることを確認します。

+0

ありがとう、Jason! –

関連する問題