如何使用C#和Linq实现动态搜索功能?

时间:2013-03-09 12:17:28

标签: c# asp.net linq

我正在尝试在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 

所有内容都可以自定义,并在运行时构建。

实施此方法的最佳方法是什么?

1 个答案:

答案 0 :(得分: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