我正在尝试在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
所有内容都可以自定义,并在运行时构建。
实施此方法的最佳方法是什么?
答案 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 });