不知道你是不是想要这个功能:自己上MSDN查吧。计算给定的表达式并返回类型化结果。重载列表
计算表示 XPath 表达式的字符串,并返回类型化结果(数字、布尔值、字符串或节点集)。使用 XPathNodeIterator 循环访问一组节点。[Visual Basic] Overloads Overridable Public Function Evaluate(String) As Object
[C#] public virtual object Evaluate(string);
[C++] public: virtual Object* Evaluate(String*);
[JScript] public function Evaluate(String) : Object;
计算 XPathExpression 并返回类型化结果(数字、布尔值、字符串或节点集)。使用 XPathNodeIterator 循环访问一组节点。[Visual Basic] Overloads Overridable Public Function Evaluate(XPathExpression) As Object
[C#] public virtual object Evaluate(XPathExpression);
[C++] public: virtual Object* Evaluate(XPathExpression*);
[JScript] public function Evaluate(XPathExpression) : Object;
使用提供的上下文计算 XPathExpression,并返回类型化结果(数字、布尔值、字符串或节点集)。[Visual Basic] Overloads Overridable Public Function Evaluate(XPathExpression, XPathNodeIterator) As Object
[C#] public virtual object Evaluate(XPathExpression, XPathNodeIterator);
[C++] public: virtual Object* Evaluate(XPathExpression*, XPathNodeIterator*);
[JScript] public function Evaluate(XPathExpression, XPathNodeIterator) : Object;
示例
[Visual Basic, C#] 下面的示例计算客户订单的总价。[Visual Basic, C#] 注意   此示例显示如何使用 Evaluate 的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
[Visual Basic] 
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.XPathpublic class Sample  public shared sub Main()    Dim doc as XmlDocument = new XmlDocument()
    doc.Load("order.xml")
    Dim nav as XPathNavigator = doc.CreateNavigator()    ' Calculate the total of the order.
    Dim expr as XPathExpression = nav.Compile("sum(//price/text())")
    Dim total as double = CType(nav.Evaluate(expr), double)    ' If the total is more than 30 dollars, give the
    ' user a 5 dollar discount.
    if (total > 30.00)
      Dim disc as double = 5.00
      total = total - disc
      Console.WriteLine("Total price: ${0}", total)
    else
      Console.WriteLine("Total price: ${0}", total)
    end if  end sub
end class
[C#] 
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;public class Sample
{
  public static void Main()
  {    XmlDocument doc = new XmlDocument();
    doc.Load("order.xml");
    XPathNavigator nav = doc.CreateNavigator();    // Calculate the total of the order.
    XPathExpression expr = nav.Compile("sum(//price/text())");
    double total = (double) nav.Evaluate(expr);    // If the total is more than 30 dollars, give the
    // user a 5 dollar discount.
    if (total > 30.00){
      double disc = 5.00;
      total = total - disc;
      Console.WriteLine("Total price: ${0}", total);
    }
    else
      Console.WriteLine("Total price: ${0}", total);
    
  }
}
该示例使用文件 order.xml 作为输入。<!--Represents a customer order-->
<order>
  <book ISBN='10-861003-324'>
    <title>The Handmaid's Tale</title>
    <price>19.95</price>
  </book>
  <cd ISBN='2-3631-4'>
    <title>Americana</title>
    <price>16.95</price>
  </cd>
</order>

解决方案 »

  1.   

    说一个土方法 :)STRING S= “(4+6)*5” ;
    STRING SQLSTR = “SELECT ”+ S + “ AS R FROM YOURTABLE” ;建立SQL连接;
    执行 SQLSTR
    反回记录 取结果
      

  2.   

    呵呵,lansingcy(小子) 的方法很巧妙!学习ing!
      

  3.   

    /*  
        Rainsoft Extend Class Library for Microsoft.NET (C#)
    Copyright (c) 2002,2004 RainTrail Studio. China. All Rights Reserved!
    Author: Q.yuhen ([email protected])
    */#region Help
    /*  
      四则混合运算

    Copyright (c) RainTrail Studio. China
    All Rights Reserved!

    History:
    -----------------------------------------------
    2003.05.27 创建。

    Example:
    -----------------------------------------------
    int i = Arithmetic.Val("1+2+3+4*5");

    */
    #endregionusing Microsoft.JScript;
    using Microsoft.JScript.Vsa;
    using Microsoft.Vsa;namespace Rainsoft.TextEx
    {
    public class Arithmetic
    {
    public static object Val(string s)
    {
    VsaEngine v = new VsaEngine();
    v.InitVsaEngine("", new BaseVsaSite());
    return Microsoft.JScript.Eval.JScriptEvaluate(s, v);
    }
    }
    }
      

  4.   

    to qyuhen(秋雨痕) 
       你的方法是目前我见到最好的,但是仍然不能达到要求,因为我的公式可能是
    "a+b*(c-d/100)"这样的带变量公式,而且变量是来自数据库的记录集。而且有可能还有
    "if"类似的操作。不知道大家还有没有更好的解决办法和思路?
      

  5.   

    CodeDom “动态生成和编译代码”可能是比较好的方案,不过我也没看过,要是错了别砍我。
      

  6.   

    带变量也一样啊,使用秋雨痕的方法可以解决。
    先把你的公式中的变量替换成实际的数据,再使用秋雨的方法即可解决。
    (替换时可以使用正则进行替换)
    如:
    string gongshi="a*b";
    //a=1,b=2
    //使用正则替换后,gongshi="1*2"
    //.....
    //使用秋雨的方法
    //.....
      

  7.   

    to sarcophile(食肉动物) 
       我没听懂你的意思。可以解释一下吗?
      

  8.   

    下这个文件看看吧,专门解决你这个问题的,其余的不多说了.
    http://www.webendshere.com/vbpatterns/dyna/dynacode.pdf