2013-03-09 217 views
0

我想在C#中实现动态搜索功能。我的搜索会像如何使用C#和Linq实现动态搜索功能?

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 

一切都是定制到用户,并建立在运行时。

实现此目的的最佳方法是什么?

+0

请您可以在实施的初始阶段显示一些代码 – 2013-03-09 12:31:29

+0

。只是想向你们确认什么是最好的方法? – user2067567 2013-03-09 12:50:05

回答

1

检查this回答在这个问题上关于如何动态地建立一个表达式的例子。

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

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 }); 

参考 - Expression TreesExpressionType

+0

谢谢。表达树背后有我的想法。但我该怎么做在运行时间。在我的情况下,我怎么知道用户是否搜索1属性值或5属性。只有我知道他点击了按钮后? – user2067567 2013-03-11 07:14:03

+0

也可以定制我的问题,如高度> 170所有三个参数将由用户在运行时输入 – user2067567 2013-03-11 07:15:03

+0

这需要更多的智能在系统中。你所说的话需要输入推理1或许多参数将转换为“相等”或“进入”操作。但是在其他一些情况下,这些案例的排列可能会令人望而却步。 – 2013-03-11 07:47:29

相关问题