如何检查表达式

时间:2018-02-17 00:04:13

标签: c#

我想检查给定的Expression<Func<TSource,bool>>是否使用TSource的给定属性,例如我有Customer类型:

public class Customer 
{
    public bool Active{get;set;}
    // ...
}

我有流畅的表达方式:

var exp1 = q => q.Name.Contains("a") && q.Addresses.Any(x=>x.City.Contains("b")) && q.Active;
var exp2 = q => q.Name.Contains("a") && q.Addresses.Any(x=>x.City.Contains("b"));
var exp3 = q => q.Name.Contains("a") && q.Addresses.Any(x=>x.City.Contains("b")) && q.Active || !q.Active;
var exp4 = q => q.Name.Contains("a") && q.Addresses.Any(x=>x.City.Contains("b")) && q.Active == isActive; // isActive is a variable.

或者像这样的任何表达式,我如何检查该表达式是否使用Property Active或No(如果可能)。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我想一个肮脏的方法就是这样做:

bool containsActive = exp1.ToString().Contains(".Active");

但是,如果你有这样的表达,请记住:

var exp2 = q => q.Name.Contains("a") && 
    q.Addresses.Any(x=>x.City.Contains(".Active"));

这也将返回true因为整个表达式被视为字符串.Active