如何使用泛型类型计算 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;

有没有办法在不知道实际数据类型的情况下将数据相加?

在这种情况下,如何对列求和?

我需要能够手动对记录求和,因为我稍后需要根据数据进行小计。

如何使用泛型类型计算 C# 中的总计

这似乎工作正常,尽管我对这种方法不太满意:

var result = AddTypelessNumbers((int)15 , (decimal)15.12));

static dynamic AddTypelessNumbers(dynamic a, dynamic b)
{
    return a + b;    
}