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(“扇区”)