你可以做的是:
- 从数据库中获取数据到数据表中
- 从结果中选择 Rate 和 Total 的两行
- (如果您不需要显示它们,请从表格中删除这些行)
- 根据两行中的值进行计算
- 手动向表中添加新行以获得结果
编辑
也许我没有完全理解你的数据结构。所以让我们看一些场景。如果您的不在其中,请提供有关数据表中一行实际外观的更多详细信息:
案例 a:数据存储在列中,您也希望该行中的 Totals 和 Amount 列
Value1 Value2 Value3 Rate Total Amount
1 5 3 10 ? ?
您可以按如下方式调整您的 SQL 语句:
SELECT Value1, Value2, Value3, Rate,
(Value1+Value2+Value3) AS Total,
((Value1+Value2+Value3) * Rate) AS Amount
FROM <table>
或者,如果您在 C# 中使用类型化数据集,则可以使用普通SELECT * ...
语句并将具有相应表达式(Expression
属性 - 相当于计算列)的列手动添加到类型化数据集中的表中。
案例 b:数据存储在行中,您也希望 Total 和 Amount 为行
RowTitle Value
Value1 1
Value2 5
Value3 2
Rate 10
现在您需要在 C# 中使用 for 循环来遍历所有行,将值相加,然后使用RowTitle
“Total”和“Amount”创建两个新行并将它们添加到您的表中。
编辑 2
你,所以我从你的第二条评论中了解到,你的数据库中实际上有两个表。一个包含实际数据,一个包含费率。您现在根据用户定义的设置从这些表中进行选择,您实际上在 C# 中的数据集中获得了两个表 - 一个用于该数据,一个用于速率。
AFAIK SQL Server Compact Edition 不允许您使用JOIN
,但这将是最简单的:从数据表中选择数据并将其加入“Rates”表,根据用户设置选择相应的速率。然后你可以做我在上面“案例a”中提到的计算。
但是,我认为您不能使用JOIN
,所以我建议您将数据放入您的应用程序中(产生两个单独的表,一个用于数据,一个用于速率)。您修改数据SELECT
语句,以便获得Amount
具有默认值的附加列0
。
SELECT *, 0 AS Amount FROM <data table>
然后,在 C# 中,您遍历数据表中的所有记录并计算Amount
记录的值。
private void GetData(...)
{
// Call SELECT statements to fill a dataset with two tables
DataSet set = new DataSet();
....
// set now contains tables[0] (for the data) and tables[1] (for the Rate).
// Get the Rate
int rate = (int)set.Tables[1].Rows[0]["Rate"]; // Assuming that the column is named "Rate"
// Now iterate over all data rows and calculate amount
foreach (DataRow row in set.Tables[0])
{
row["Amount"] = ((int)row["Total"] * rate);
}
// Mark the data set as unmodified
set.AcceptChanges();
}
请注意,此代码可能需要一些调整 - 我还没有实际测试过它。如果“Rates”-Table 包含多行,并且需要根据其他设置选择正确的比率,您可以考虑创建一个函数,根据这些设置返回正确的行:
private DataRow FindRateRow(DataSet set, <parameters for selecting the correct row>)
{
DataRow[] row = set.Tables[1].Select(<Filter string according to parameters>);
if (row != null && row.Length > 0)
return row[0];
return null;
}
使用int rate = (int)FindRateRow(set, ...)["Rate"];
上面。