不知道你是不是想要这个功能:自己上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>
计算表示 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>
STRING SQLSTR = “SELECT ”+ S + “ AS R FROM YOURTABLE” ;建立SQL连接;
执行 SQLSTR
反回记录 取结果
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);
}
}
}
你的方法是目前我见到最好的,但是仍然不能达到要求,因为我的公式可能是
"a+b*(c-d/100)"这样的带变量公式,而且变量是来自数据库的记录集。而且有可能还有
"if"类似的操作。不知道大家还有没有更好的解决办法和思路?
先把你的公式中的变量替换成实际的数据,再使用秋雨的方法即可解决。
(替换时可以使用正则进行替换)
如:
string gongshi="a*b";
//a=1,b=2
//使用正则替换后,gongshi="1*2"
//.....
//使用秋雨的方法
//.....
我没听懂你的意思。可以解释一下吗?
http://www.webendshere.com/vbpatterns/dyna/dynacode.pdf