Я использую Albaharis PredicateBuilder, как показано здесь http://www.albahari.com/nutshell/predicatebuilder.aspx, чтобы отфильтровать результаты в приложении Linq-to-SQL.Это прекрасно работает.
То, что я сейчас пытаюсь сделать, - это повторно использовать существующее выражение предиката фильтрации, чтобы отфильтровать объект, который имеет существующий фильтрованный объект в качестве свойства.
НапримерУ меня есть 2 класса, Order
и Customer
.У меня уже есть метод, который возвращает Expression<Func<Customer, bool>>
, который построен с использованием вышеупомянутого построителя предикатов.Теперь я хочу повторно использовать это в моем методе фильтрации Order
, который будет возвращать Expression<Func<Customer, bool>>
путем передачи свойства Order.Customer
(выражение?) В мой метод фильтра Customer
.
У меня есть кое-чтовот так (далеко не полностью, но я надеюсь, что вы поняли идею):
public class CustomerSearchCriteria
{
public Expression<Func<Customer, bool>> FilterPredicate()
{
// Start with predicate to include everything
var result = PredicateBuilder.True<Customer>();
// Build predicate from criteria
if (!String.IsNullOrEmpty(this.Name))
{
result = result.And(c => SqlMethods.Like(c.Name, this.Name));
}
// etc. etc. etc
}
public class OrderSearchCriteria
{
public Expression<Func<Order, bool>> FilterPredicate()
{
// Start with predicate to include everything
var result = PredicateBuilder.True<Order>();
// Build predicate from criteria
if (!String.IsNullOrEmpty(this.Reference))
{
result = result.And(o => SqlMethods.Like(o.Reference, this.Reference));
}
// etc. etc. etc
// This is where I would like to do something like:
// result = result.And(o => o.Customer "matches" this.CustomerCriteria.FilterPredicate()
}
Может ли какой-нибудь гуру выражений Linq помочь мне?
Заранее спасибо.