0

我正在尝试在 C# 中实现动态搜索功能。我的搜索会像

Attribute operand Value === > Height > 170 

就像上面的搜索列表一样,用户可以根据需要添加尽可能多的数据来过滤该数据。属性匹配我的列名可能来自 SQL DB 中的不同表。

实现此类搜索的最佳方法是什么?我对 Linq 很陌生,我想了解http://www.albahari.com/nutshell/predicatebuilder.aspx

如何动态构建查询或对于此类易于维护的搜索的最佳方式是什么?

例子:

Attribute operand Value === > Height = 170 
Attribute operand Value === > Altitude > 40000  
Attribute operand Value === > temperature < 105 

一切都可以为用户定制并在运行时构建。

实现这一点的最佳方法是什么?

4

1 回答 1

1

检查this question in this answer以获取有关如何动态构建表达式的示例。

在你的情况下,我认为这样的事情应该会有所帮助(在我脑海中写下这个,请原谅语法错误)。

PropertyInfo propInfo = typeof(T).GetProperty(Attribute);
ParameterExpression pe = Expression.Parameter(typeof(Attribute), Attribute);
Expression right = Expression.Parameter(typeof(int), Value);
Expression predicateBody = Expression.GreaterThan(left, right);

Expression<Func<int, bool>> lambda1 =
                Expression.Lambda<Func<int, bool>>(
                    predicateBody,
                    new ParameterExpression[] { numParam });

参考 -表达式树表达式类型

于 2013-03-09T12:52:01.220 回答