【问题标题】:Sum Datatable values with same criteria对具有相同条件的数据表值求和
【发布时间】:2020-11-17 21:33:43
【问题描述】:

我有一个数据表,我需要合并IPCSecond Best Issuer 列中具有相同值的单元格,并将Dirty value PCPar Value LC 列中的值相加。所有的值都是字符串类型。

例如:

我是查询的初学者,我正在寻找使用 LINQ 在 C# 中执行此操作的简单方法。 谢谢你

【问题讨论】:

    标签: c# linq select datatable


    【解决方案1】:

    尝试以下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    namespace ConsoleApplication11
    {
        class Program
        {
            static void Main(string[] args) 
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("IPC", typeof(int));
                dt.Columns.Add("Dirty", typeof(int));
                dt.Columns.Add("Second", typeof(string));
                dt.Columns.Add("Par", typeof(int));
    
                dt.Rows.Add(new object[] { 1, 5, "BB", 55 });
                dt.Rows.Add(new object[] { 1, 4, "B", 30 });
                dt.Rows.Add(new object[] { 2, 15, "AAA", 20 });
                dt.Rows.Add(new object[] { 1, 10, "BB", 80 });
                dt.Rows.Add(new object[] { 2, 20, "AA", 90 });
                dt.Rows.Add(new object[] { 2, 30, "AAA", 50 });
                dt.Rows.Add(new object[] { 1, 5, "B", 60 });
                dt.Rows.Add(new object[] { 2, 15, "AA", 70 });
    
                var groups = dt.AsEnumerable().GroupBy(x => new {ipc = x.Field<int>("IPC"), second = x.Field<string>("Second")}).ToList();
    
    
                DataTable dtsum = dt.Clone();
    
                foreach(var group in groups)
                {
                    dtsum.Rows.Add(new object[] {group.Key.ipc, group.Sum(y => y.Field<int>("Dirty")), group.Key.second, group.Sum(y => y.Field<int>("Par"))});
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢jdweng!即使我在数据表中的所有数据都是字符串类型,它是否有效?
    • 不,因为您要对两列求和。您需要将字符串转换为整数才能求和。
    • 非常感谢。如果可能,最后一件事:如果在 IPC 列之前我有另一个名为“扇区”的列保持不变,我如何将它添加到 dtsum 中?
    • 列是按顺序添加的,因此作为第一项添加到新对象[] { group.FirstOrDefault().Field("sector")
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2020-08-23
    • 2018-08-18
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多