Estoy buscando una manera de analizar una expresión condicional a una cadena.Analizando Expresiones Condicionales a la Cadena
El mejor ejemplo que puedo pensar es LINQ-to-SQL. Utiliza ExpressionVisitors para formatear cláusulas "Dónde". Ejemplo:
from a in b where a.x == 5 && a.y < 3 select a
Eso se traduciría en la siguiente cadena (aproximadamente, MSSQL actual no es para mí):
"SELECT * FROM b WHERE x = 5 AND y < 3"
Por lo que he leído, esto se hizo utilizando la clase ExpressionVisitor, como Explicado en este artículo: http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx
Ahora el problema es que no uso LINQ, pero necesito esta funcionalidad en particular. ¿Hay alguna manera de analizar una condición como esa? Estoy dispuesto a hacer cualquier cosa con la reflexión, los delegados, lambda, etc.
Honestamente, no creo que sea posible, pero mi cerebro es un poco frito (es decir: bueno si la pregunta es ridícula) , así que pensé que podría darle una oportunidad a S/O.
EDITAR: ejemplo de uso final:
// 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"
EDIT 2: Sí, un número puede ser inferior al 3 e igual a 5. Te dije que mi cerebro está frito.
LINQ a SQL hace exactamente esto. Si escribes el tuyo, estarías reimplantando LINQ-to-SQL, que ya existe, eso parece un esfuerzo sin sentido. (Sin embargo, la gente lo ha hecho, google para IQToolkit, por ejemplo). Dijo "No uso LINQ", pero su código dice lo contrario (está lleno de LINQ; los árboles de expresión se consideran parte de LINQ). – Timwi