如何为现有的lambda表达式添加条件?

时间:2015-04-09 12:41:09

标签: c# linq lambda expression

考虑以下课程:

public class Customer
{
    public int Id {get; set;}
    public int GroupId {get; set;}
    public int Number {get; set;}
    public string Name {get; set;}
}

我在服务层中有一个方法:

public Customer Get(Expression<Func<Customer, bool>> where)
{
    return customerRepository.Get(where);
}

主叫代码是:

var customer = customerService.Get(x => x.Number == number);

在上述方法中,用户根据属性搜索客户(不包括GroupId,因为它隐藏在ViewModel中)。但是,用户始终被分配到一个组,因此,他只被允许搜索其组内的客户。因此必须动态添加GroupId

如何在上述方法中将GroupId添加到where表达式。 GroupId可能已在表达式中提供,也可能未提供。

1 个答案:

答案 0 :(得分:4)

使用PredicateBuilder,您可以帮助构建可添加到通话中的表达式。这将允许你做类似下面的事情。

public void DoSearch(MyViewModel vm)
{
    Expression<Func<Customer, bool>> myFilter = x => yourCurrentFilterLogic;
    var combined = myFilter.And(x => x.GroupId == vm.GroupId);   //PredicateBuilder extension method
    var customers = Get(combined);
}

public Customer Get(Expression<Func<Customer, bool>> where)
{
    return customerRepository.Get(where);
}