【问题标题】:sum string datatype of a datatable数据表的总和字符串数据类型
【发布时间】:2012-03-13 21:17:14
【问题描述】:

我想计算数据表中字符串数据类型列的总和。

我已经试过了:

Int32 omarks = Convert.ToInt32(dt.Compute("Sum(Convert(Marks, 'System.Int32'))", ""));
tbobtained.Text = omarks.ToString();

但是我收到了这个错误:

聚合参数中的语法错误:需要带有可能的子限定符的单列参数。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    这个怎么样:

    int omarks = dt.Rows.Select(dr=>(int)dr["Marks"]).Sum();
    tbobtained.Text = omarks.ToString();
    

    dr 是 lambda 函数的参数,它接受一个数据行(即 dr)并返回 Marks 列的整数值。

    如果您想了解此代码为何有效,您需要了解LINQC# lambda expressions

    【讨论】:

    • 我需要在 foreach 循环中使用此代码吗?这段代码中的博士是什么?
    【解决方案2】:

    它一定不喜欢嵌套函数调用,即使documentation of the expression syntax 没有提到任何问题。

    我尝试将对Convert() 的调用提取到这样的计算列中...

    static void Main(string[] args)
    {
        int[] data = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        DataTable dt = CreateDataTable(data);
        int omarks = Convert.ToInt32(dt.Compute("Sum(MarksInt)", ""));
        string text = omarks.ToString();
    
        Console.WriteLine(omarks == data.Sum());
    }
    
    static DataTable CreateDataTable(IEnumerable<int> data)
    {
        DataTable table = new DataTable();
    
        table.Columns.Add("Marks", typeof(string));
        table.Columns.Add("MarksInt", typeof(int), "Convert(Marks, 'System.Int32')");
    
        foreach (int i in data)
        {
            DataRow row = table.NewRow();
    
            row["Marks"] = i.ToString();
    
            table.Rows.Add(row);
        }
    
        return table;
    }
    

    ...它执行时不会抛出 Exception 并正确打印 true

    【讨论】:

    • 培根使用你的方式,我将不得不在我的数据表中添加一个额外的列名称“MarksInt”,这似乎不是处理这个问题的正确方法。我终于不得不像这样处理它。 int omarks = 0; foreach (DataRow dr in dt.Rows) { if (dr["Marks"].ToString() != "A") { omarks = omarks + int.Parse(dr["Marks"].ToString()); } } tbobtained.Text = omarks.ToString();
    • 我并没有提出这是一个真正的解决方案,只是证明调用 Convert()Sum() 确实有效,只是由于某种原因在一个表达式中组合在一起时不起作用。
    • 培根我想问你另一个问题..你能给我你的电子邮件地址吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多