如何使用泛型类型计算 C# 中的总计
本文关键字:何使用 泛型类型 计算 | 更新日期: 2023-09-27 17:56:56
我正在尝试编写一个应用程序,该应用程序将允许我针对我的数据库生成动态查询。到目前为止,我能够生成/执行查询并将数据填充到表中,没有任何问题。
现在,我的一些查询使用SQL聚合函数,即COUNT(*), SUM(), AVG(), MAX...
当我使用聚合列时,我需要能够对总计的聚合列求和。由于这是动态查询,因此数据类型可能会有所不同。它可以是整数、双精度或大整数
执行查询后,我将数据填充到字典列表中。我的列表是这样定义的
public List<Dictionary<string, object>> Data { get; set; }
为了将数据填充到没有总计的 HTML 表中,我在视图中执行以下操作
@for (int y = 0; y < Model.Data.Count; y++)
{
<tr>
@foreach (var attribute in Model.Data[y])
{
<td>@attribute.Value</td>
}
</tr>
}
现在,我需要能够为某些聚合列添加总计。但问题是我不知道数据类型,因为它是字符串。
这是我尝试做的
@{
var aggregateColumns = Model.Columns.Where(x => x.AggregateFunction != ReportsEngine.Support.ReportsGenerator.Report.Contracts.SqlAggregateFunctions.None).ToList();
var grandTotals = new Dictionary<string, object>();
}
@for (int y = 0; y < Model.Data.Count; y++)
{
<tr>
@foreach (var attribute in Model.Data[y])
{
<td>@attribute.Value</td>
var column = aggregateColumns.Where(x => x.SqlAlias == attribute.Key).FirstOrDefault();
if(column != null)
{
//At this point we know this is an aggregate column. Sum the data
//grandTotals[attribute.Key] += attribute.Value;
}
}
</tr>
}
如您所见,我尝试每次都使用字典递增。 grandTotals[attribute.Key] += attribute.Value;
有没有办法在不知道实际数据类型的情况下将数据相加?
在这种情况下,如何对列求和?
我需要能够手动对记录求和,因为我稍后需要根据数据进行小计。
这似乎工作正常,尽管我对这种方法不太满意:
var result = AddTypelessNumbers((int)15 , (decimal)15.12));
static dynamic AddTypelessNumbers(dynamic a, dynamic b)
{
return a + b;
}