Exécution de code indirect / C #

Context

Nous disposons actuellement d'un système basé sur Excel pour la création de spécifications pour une société de location de sons et d'éclairage.

Une partie de cette colonne est une colonne dans la feuille Excel intitulée «autospec», composée de formules Excel pour des éléments de stock individuels (par exemple, vous spécifiez un haut-parleur, puis les formules dans la colonne autospec calculent les câbles dont vous avez besoin et ajoutez-les sur la spécification automatiquement.

Exemple de formule

Le câble de microphone de 10 m peut avoir une formule comme suit:

 =IF([loudspeakers]>0,[loudspeakers]*2,0)+([mixing desk]*4) 

Nous passons maintenant à une database appropriée avec un front-end C #.

Question

Ce que j'aimerais, c'est de pouvoir stocker les formules autospec pour chaque élément stock dans une table et, lorsque l'user spécifie un élément de l'extrémité avant, le programme doit find la formule pertinente, l'exécuter et modifier la quantité de spécifications, le cas échéant .

Bottom line: J'ai besoin d'exécuter un code contenu dans une string.

Est-ce que je parle de ce mauvais path? Y a-t-il une meilleure façon?

J'ai posé une question similaire une fois: Comment puis-je évaluer une expression C # de façon dynamic?

Vous pourriez probablement utiliser cela pour évaluer ces expressions. Ce n'est pas vraiment une chose sûre à faire, à less que vous ne puissiez garantir que personne ne va append de la bascule (lire: code mal) à votre database.

Si vous pouvez split les formules en "familles", de sorte que chaque input dans votre colonne de formule est un membre d'un petit set de formules (5-10) avec des parameters simplement différents, vous pouvez essayer quelque chose comme ceci:

 [ItemTable]<-[ItemFormulaParameters(param1, param2, param3)]->[FormulaTable(name)] 

Et ayez une méthode d'usine pour instancier les objects de formule par leur nom. Chaque object de formule de ce type a une propriété "calcul (param1, param2, param3)" …

Soit, créez votre propre interpréteur de code ou créez un «moteur de règles dynamics» qui crée une représentation binary de règles c # qui peuvent être exécutées par un «moteur de règles» que vous devriez écrire.