【发布时间】:2010-11-17 01:57:26
【问题描述】:
我正在寻找一种将条件表达式解析为字符串的方法。
我能想到的最好的例子是 LINQ-to-SQL。它使用 ExpressionVisitor 来格式化“Where”子句。示例:
from a in b where a.x == 5 && a.y < 3 select a
这将转化为以下字符串(大约,MSSQL 对我来说不是最新的):
"SELECT * FROM b WHERE x = 5 AND y < 3"
根据我的阅读,这是使用 ExpressionVisitor 类完成的,如本文所述:Link
现在的问题是我不使用 LINQ,但我需要这个特殊的功能。有没有办法解析这样的条件?我愿意为反射、委托、lambda 等做任何事情。
老实说,我不认为这是可能的,但我的脑子有点炸(请阅读:如果这个问题很荒谬,那就太好了),所以我想我不妨给 S/试试看吧。
编辑:最终用法示例:
// Usage:
foo.Bar(foo => foo.X == 5 && foo.Y < 3)
// Ideal string output (variable name (foo) is not needed):
"foo.X == 5 && foo.Y < 3"
编辑 2:是的,一个数字可以小于 3 等于 5。告诉过你我的大脑被炸了。
【问题讨论】:
-
LINQ-to-SQL 正是这样做的。如果您自己编写,您将重新实现已经存在的 LINQ-to-SQL——这似乎是一种毫无意义的努力。 (但人们已经这样做了;例如 google for IQToolkit。)您说“我不使用 LINQ”,但您的代码却相反(它充满了 LINQ;表达式树被认为是 LINQ 的一部分)。
标签: c# linq expression expressionvisitor