给定一个具有 Dictionary 属性的类
public class Product
{
public Dictionary<string, string> Attributes { get { return attributes; } }
private Dictionary<string, string> attributes = new Dictionary<string, string>();
}
我希望能够根据从数据存储中检索到的标准匹配产品列表中的产品,这些标准的格式为
Brand == Tyco
Color != Blue
我目前的方法是从过滤器构造一个表达式,然后将该表达式作为参数传递给 LINQWhere
方法调用,如下所示
products = products.Where(myConstructedExpression);
wheremyConstructedExpression
通常是一个看起来像的 lamda 表达式
p => p.Attributes[attribute] == value
lambda.Compile()
我已经组装了以下代码用于测试目的,但无论我为他的左表达尝试了什么,它总是无法调用。
Dictionary<string, ExpressionType> expressionType = new Dictionary<string, ExpressionType>();
expressionType.Add("==", ExpressionType.Equal);
expressionType.Add("!=", ExpressionType.NotEqual);
string filter = "Brand == Tyco";
string[] fields = filter.Split(' ');
string attribute = fields[0];
string op = fields[1];
string value = fields[2];
Product product = new Product();
product.Attributes.Add("Brand", "Tyco");
var parameter = Expression.Parameter(typeof(Product), "p");
var left = /***** THIS IS WHAT I AM FAILING TO CONSTRUCT PROPERLY ********/
var right = Expression.Constant(value);
var operation = Expression.MakeBinary(expressionType[op], left, right);
var lambda = Expression.Lambda<Func<Product, bool>>(operation, parameter);
var result = lambda.Compile()(product);
问题
- 这是否是一种合理的方法,如果是,
- 如何构造左表达式?