Можно ли получить доступ к свойству (по имени) из общего объекта, используя отражение? - PullRequest
4 голосов
/ 24 января 2012

Я хотел бы создать общий запрос из универсального класса 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 голосов
/ 24 января 2012

Заставьте SelectBy взять Expression<Func<T, bool>> (назовите его predicate), и тогда вы можете просто сказать

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

Вы можете передать экземпляр Expression<Func<T, bool>>, сказав

x => x.Foo == foo

например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...