Как создать коллекцию экспрессии?
У меня есть репозиторий со следующим методом:
IEnumerable<T> FindAll<TRelated>(Specification<T> specification,
Expression<Func<T, TRelated>> fetchExpression);
Мне нужно передать более одного выражения. Я думал об изменении подписи на:
IEnumerable<T> FindAll<TRelated>(Specification<T> specification,
IEnumerable<Expression<Func<T, TRelated>>> fetchExpression);
- возможно ли это?
- Как создать массив, скажем, выражений для передачи в этот метод?
В настоящее время я вызываю метод из моего сервисного уровня следующим образом:
var products = productRepository.FindAll(specification,p => p.Variants);
Но я хотел бы пройти p => p.Variants
и p => p.Reviews
, например. А потом в репозитории я хотел бы повторить через выражение и добавить их в запрос.
Немного информации о том, почему я это делаю, смотрите в блоге Бена Фостера нетерпеливая загрузка с NHibernate.
2 ответа:
Для этого можно использовать params:
IEnumerable<T> FindAll(Specification<T> specification, params Expression<Func<T, object>>[] fetchExpressions) { var query = GetQuery(specification); foreach(var fetchExpression in fetchExpressions) { query.Fetch(fetchExpression); } return query.ToList(); }
Это можно назвать так:
var products = productRepository.FindAll(specification, p => p.Variants, p => p.Reviews );