Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用相同条件对数据表值求和_C#_Linq_Select_Datatable - Fatal编程技术网

C# 使用相同条件对数据表值求和

C# 使用相同条件对数据表值求和,c#,linq,select,datatable,C#,Linq,Select,Datatable,我有一个数据表,我需要合并列IPC和Second-Best Issuer中具有相同值的单元格,并对列Dirty-value-PC和Par-value-LC中的值求和。所有值都是字符串类型 例如: 我是查询的初学者,我正在寻找用LINQ在C#中实现这一点的简单方法。 谢谢请尝试以下内容: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data;

我有一个数据表,我需要合并列
IPC
Second-Best Issuer
中具有相同值的单元格,并对列
Dirty-value-PC
Par-value-LC
中的值求和。所有值都是字符串类型

例如:

我是查询的初学者,我正在寻找用LINQ在C#中实现这一点的简单方法。 谢谢

请尝试以下内容:

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"))});
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序11
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“IPC”,类型(int));
添加(“脏”,typeof(int));
添加(“第二”,类型(字符串));
添加(“Par”,类型(int));
添加(新对象[]{1,5,“BB”,55});
Add(新对象[]{1,4,“B”,30});
Add(新对象[]{2,15,“AAA”,20});
Add(新对象[]{1,10,“BB”,80});
Add(新对象[]{2,20,“AA”,90});
Add(新对象[]{2,30,“AAA”,50});
Add(新对象[]{1,5,“B”,60});
添加(新对象[]{2,15,“AA”,70});
var groups=dt.AsEnumerable().GroupBy(x=>new{ipc=x.Field(“ipc”),second=x.Field(“second”)}.ToList();
数据表dtsum=dt.Clone();
foreach(组中的var组)
{
添加(新对象[]{group.Key.ipc,group.Sum(y=>y.Field(“Dirty”)),group.Key.second,group.Sum(y=>y.Field(“Par”))});
}
}
}
}

谢谢你jdweng!即使我在datatable中的所有数据都是字符串类型,它也能工作吗?不,因为您要对两列求和。您需要将字符串转换为整数才能求和。非常感谢。如果可能的话,最后一件事是:如果在IPC列之前有另一个名为“扇区”的列保持不变,我如何将其添加到dtsum中?这些列是按顺序添加的,因此作为第一项添加到新对象[]{group.FirstOrDefault().Field(“扇区”)