Я использую 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?
Заранее спасибо.