Я хотел бы создать общий запрос из универсального класса 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(); } }
Заставьте SelectBy взять Expression<Func<T, bool>> (назовите его predicate), и тогда вы можете просто сказать
SelectBy
Expression<Func<T, bool>>
predicate
var query = this.Entities.Where(predicate);
Вы можете передать экземпляр Expression<Func<T, bool>>, сказав
x => x.Foo == foo
например.