Evaluar expresión en un string

152 views
Skip to first unread message

Martín Comparetto

unread,
Nov 9, 2012, 2:27:38 PM11/9/12
to altnet-...@googlegroups.com
Hola a todos!
Estoy necesitando evaluar expresiones lógicas almacenadas en un campo tipo char.
Es decir, puedo tener un campo que contenga "valor1 = valor2" o "valor1 != valor2" en donde valor1 o valor2 pueden ser valores fijos o propiedades de un objeto que ya tengo creado.
También podría poner 3 campos: campo valor1, campo operador y campo valor2. La estructura de la db la puedo cambiar.
Estoy trabajando con VS 2010, c#.
Al menos una idea para donde apuntar, después sigo investigando!
Muchas gracias!

--
Martín R. Comparetto

José F. Romaniello

unread,
Nov 9, 2012, 2:35:50 PM11/9/12
to AltNet-Hispano
No tan facil como en un lenguaje dinámico!, pero puedes buscar alguna solución mediante:

-  codedom
-  el evaluator de mono
-  roslyn

y también hay algunos inventos para convertir un string en una linq expression.

Creo que en gran medida también va depender de que cosas puede haber en ese string,

-  puede haber una variable que este en el scope cuando evaluas?
-  podes definir una clase de c# en ese string?

Sí es muy simple, puedes intentar parsearlo tu mismo


--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Mario Dal Lago

unread,
Nov 9, 2012, 2:47:23 PM11/9/12
to altnet-...@googlegroups.com
Hola, 

Hace un tiempo hice esta librería https://bitbucket.org/mdallago/rulesengine para evaluar reglas lógicas del tipo ((propiedad1==valor) && (propiedad2>10))
Utiliza una gramática para definir el lenguaje y NHibernate para persistir las reglas.
Saludos
 

Mario Dal Lago


De: Martín Comparetto <martin.c...@gmail.com>
Para: "altnet-...@googlegroups.com" <altnet-...@googlegroups.com>
Enviado: viernes, 9 de noviembre de 2012 16:27
Asunto: [altnet-hispano] Evaluar expresión en un string

Angel Java Lopez

unread,
Nov 9, 2012, 2:51:02 PM11/9/12
to altnet-...@googlegroups.com
Hola gente!

Martin, tal vez es un poco grande, pero podrias usar lo que muestro en los tests de este proyecto:


Un ejemplo "mas liviano" usando Dynamic Linq, pero solo expresiones, no comandos, deberias pasar tus "variables" como parametros, asi como ahi paso "x" como parametro, en


Nos leemos!

Angel "Java" Lopez
@ajlopez
gh:ajlopez

2012/11/9 Martín Comparetto <martin.c...@gmail.com>

Ale Miralles

unread,
Nov 9, 2012, 6:06:46 PM11/9/12
to Angel Java Lopez, altnet-...@googlegroups.com
Si lo que almacenas en la base es codigo csharp, Roslyn de una.
Saludos, Ale Miralles
http://amiralles.com.ar

Sent from my Windows Phone

From: Angel Java Lopez
Sent: 11/9/2012 16:51
To: altnet-...@googlegroups.com
Subject: Re: [altnet-hispano] Evaluar expresión en un string

Angel Java Lopez

unread,
Nov 9, 2012, 6:20:27 PM11/9/12
to altnet-...@googlegroups.com
Hola gente!

Cierto, esta Roslyn!

Tambien hay formas de compilar dinamicamente sin tener lo ultimo de .NET, por ejemplo


coleccionado en mi enlaces 

Nos leemos!

Angel "Java" Lopez
@ajlopez
gh:ajlopez

2012/11/9 Ale Miralles <amiral...@gmail.com>

Walter Poch

unread,
Nov 9, 2012, 7:23:53 PM11/9/12
to altnet-...@googlegroups.com
Hace un tiempo hice una PoC pero usando IronPython o IronRuby (no recuerdo), y desde ahí referenciar los tipos de .net (en este caso usaba servicios de aplicación que luego llamaban a NHibernate).

Fijate si te sirve persistir en vez de C#, en algún otro lenguaje dinámico.

Saludos,
Saludos,

Walter G. Poch
Sr. .Net Developer
--------------------------------------------
Cell: +54 (9 341) 3353273
walte...@gmail.com

Martín Comparetto

unread,
Nov 12, 2012, 7:46:41 AM11/12/12
to altnet-...@googlegroups.com
Hola gente!!! Perfecto! Muchos caminos!!!.... bueno... voy a ponerme a estudiar y mañana les cuento!
Muchas gracias!
Martín R. Comparetto

Reply all
Reply to author
Forward
0 new messages