望高手解答,合并DataTable相同行数据 显示总价格?

xiaoweiwwwwmmmm 2011-07-05 09:57:07
UsedDay MTID maxDate TMoney
1 1 2011-07-04 10:35:29.330 12
3 1 2011-07-05 09:46:38.277 108
5 1 2011-07-05 09:46:04.793 60
30 1 2011-07-05 09:46:04.793 204
90 1 2011-07-05 09:46:13.590 612
365 1 2011-07-04 18:53:16.650 568
730 1 2011-07-04 18:52:57.903 1136
1095 1 2011-07-04 18:52:05.623 1704
1460 1 2011-06-30 09:28:16.220 0
3 2 2011-07-05 09:47:57.123 36
5 2 2011-07-05 09:48:07.470 60
30 2 2011-07-05 09:47:50.850 68
1095 2 2011-07-01 17:05:25.810 1704
数据库返回DataTable 要求显示UsedDay 1-29天 表示日统计 范围30-365 30的倍数显示月统计 365的倍数显示年统计
按照类型MTID 显示年月日的总个数 以及总钱数

统计结果为
UsedDay MTID maxDate TMoney Count
1 1 2011-07-05 09:46:04.793 180 9
30 1 2011-07-05 09:46:04.793 816 2
365 1 2011-07-05 09:46:04.793 3408 4
1 2 2011-07-05 09:46:04.793 96 2
30 2 2011-07-05 09:46:04.793 68 1
365 2 2011-07-05 09:46:04.793 1704 1
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2011-07-05
  • 打赏
  • 举报
回复
PS: 问题倒是不难
倒是懒得写前边这些一大段的基础数据:

DataTable dt=new DataTable();
dt.Columns.Add("UsedDay",typeof(int));
dt.Columns.Add("MTID",typeof(int));
dt.Columns.Add("maxDate");
dt.Columns.Add("TMoney",typeof(int));
dt.Rows.Add(1,1,"2011-07-04 10:35:29.330",12);
dt.Rows.Add(3,1,"2011-07-05 09:46:38.277",108);
dt.Rows.Add(5,1,"2011-07-05 09:46:04.793",60);
dt.Rows.Add(30,1,"2011-07-05 09:46:04.793",204);
dt.Rows.Add(90,1,"2011-07-05 09:46:13.590",612);
dt.Rows.Add(365,1,"2011-07-04 18:53:16.650",568);
dt.Rows.Add(730,1,"2011-07-04 18:52:57.903",1136);
dt.Rows.Add(1095,1,"2011-07-04 18:52:05.623",1704);
dt.Rows.Add(1460,1,"2011-06-30 09:28:16.220",0);
dt.Rows.Add(3,2,"2011-07-05 09:47:57.123",36);
dt.Rows.Add(5,2,"22011-07-05 09:48:07.470",60);
dt.Rows.Add(30,2,"2011-07-05 09:47:50.850",68);
dt.Rows.Add(1095,2,"2011-07-01 17:05:25.810",1704);

希望楼主下次有类似问题时,能在提问时,随手奉上以上的基础数据
q107770540 2011-07-05
  • 打赏
  • 举报
回复

void Main()
{

DataTable dt=new DataTable();
dt.Columns.Add("UsedDay",typeof(int));
dt.Columns.Add("MTID",typeof(int));
dt.Columns.Add("maxDate");
dt.Columns.Add("TMoney",typeof(int));
dt.Rows.Add(1,1,"2011-07-04 10:35:29.330",12);
dt.Rows.Add(3,1,"2011-07-05 09:46:38.277",108);
dt.Rows.Add(5,1,"2011-07-05 09:46:04.793",60);
dt.Rows.Add(30,1,"2011-07-05 09:46:04.793",204);
dt.Rows.Add(90,1,"2011-07-05 09:46:13.590",612);
dt.Rows.Add(365,1,"2011-07-04 18:53:16.650",568);
dt.Rows.Add(730,1,"2011-07-04 18:52:57.903",1136);
dt.Rows.Add(1095,1,"2011-07-04 18:52:05.623",1704);
dt.Rows.Add(1460,1,"2011-06-30 09:28:16.220",0);
dt.Rows.Add(3,2,"2011-07-05 09:47:57.123",36);
dt.Rows.Add(5,2,"22011-07-05 09:48:07.470",60);
dt.Rows.Add(30,2,"2011-07-05 09:47:50.850",68);
dt.Rows.Add(1095,2,"2011-07-01 17:05:25.810",1704);
var query=from r in dt.AsEnumerable()
let temp=r.Field<int>("UsedDay")<30?1:r.Field<int>("UsedDay")%30==0?30:r.Field<int>("UsedDay")%365==0?365:1
group r by new {UsedDay=temp,MTID=r.Field<int>("MTID")} into g
select new
{
UsedDay=g.Key.UsedDay,
MTID=g.Key.MTID,
maxDate=g.FirstOrDefault().Field<string>("maxDate"),
TMoney=g.Sum(t=>t.Field<int>("TMoney")),
Count=g.Count()
};
Console.WriteLine("UsedDay\tMTID\t\tmaxDate\t\tTMoney\tCount");
query.ToList().ForEach(q=>Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}",q.UsedDay,q.MTID,q.maxDate,q.TMoney,q.Count));

/*
UsedDay MTID maxDate TMoney Count
1 1 2011-07-04 10:35:29.330 180 3
30 1 2011-07-05 09:46:04.793 816 2
365 1 2011-07-04 18:53:16.650 3408 4
1 2 2011-07-05 09:47:57.123 96 2
30 2 2011-07-05 09:47:50.850 68 1
365 2 2011-07-01 17:05:25.810 1704 1
*/
}
xiaoweiwwwwmmmm 2011-07-05
  • 打赏
  • 举报
回复
嗯 是3 是求个数! 手动输入可能出现错误!
q107770540 2011-07-05
  • 打赏
  • 举报
回复
说实话你给出的统计结果让我看不懂

统计结果为
UsedDay MTID maxDate TMoney Count
1 1 2011-07-05 09:46:04.793 180 9
30 1 2011-07-05 09:46:04.793 816 2
365 1 2011-07-05 09:46:04.793 3408 4
1 2 2011-07-05 09:46:04.793 96 2
30 2 2011-07-05 09:46:04.793 68 1
365 2 2011-07-05 09:46:04.793 1704 1

第一行的9 应该是 3 吧?
q107770540 2011-07-05
  • 打赏
  • 举报
回复
var query=from r in dt.AsEnumerable()
let temp=r.Field<int>("UsedDay")<30?1:r.Field<int>("UsedDay")%30==0?30:r.Field<int>("UsedDay")%365==0?365:1
group r by new {UsedDay=temp,MTID=r.Field<int>("MTID"),TypeID=r.Field<int>("TypeID")} into g
select new
{
UsedDay=g.Key.UsedDay,
MTID=g.Key.MTID,
TypeID=g.Key.TypeID,
maxDate=g.FirstOrDefault().Field<string>("maxDate"),
TMoney=g.Sum(t=>t.Field<int>("TMoney")),
Count=g.Count()
};
xiaoweiwwwwmmmm 2011-07-05
  • 打赏
  • 举报
回复
你好 刚刚那个问题还需要你帮一下!如果还有个字段分组的话, 对Linq 不是太会
DataTable dt = new DataTable();
dt.Columns.Add("UsedDay", typeof(int));
dt.Columns.Add("MTID", typeof(int));
dt.Columns.Add("TypeID", typeof(int)); //新增字段
dt.Columns.Add("maxDate");
dt.Columns.Add("TMoney", typeof(int));


dt.Rows.Add(1, 1, "2011-07-04 10:35:29.330", 12);
dt.Rows.Add(1, 1, 2, " 2011-06-30 09:26:15.530", 0);
dt.Rows.Add(1, 3, 1, " 2011-07-05 09:46:01.287", 36);
dt.Rows.Add(1, 3, 2, "2011-07-05 09:46:38.277", 72);
dt.Rows.Add(1, 5, 1, "2011-07-05 09:46:04.793", 60);
dt.Rows.Add(1, 30, 1, "2011-07-04 14:45:35.363", 136);
dt.Rows.Add(1, 30, 2, "2011-07-04 14:32:06.007", 68);
dt.Rows.Add(1, 90, 1, "2011-06-30 12:43:23.940", 0);
dt.Rows.Add(1, 90, 2, "2011-07-05 09:46:13.590", 612);
dt.Rows.Add(1, 365, 1, "2011-07-04 18:53:16.650", 568);
dt.Rows.Add(1, 730, 2, "2011-07-04 18:52:57.903", 1136);
dt.Rows.Add(1, 1095, 2, "2011-07-04 18:52:05.623", 1704);
dt.Rows.Add(1, 1460, 1, "2011-06-30 09:28:16.220", 0);
dt.Rows.Add(2, 3, 1, "2011-07-05 09:47:57.123", 36);
dt.Rows.Add(2, 5, 2, "2011-07-05 09:48:07.470", 60);
dt.Rows.Add(2, 30, 1, "2011-07-01 17:10:15.817", 0);
dt.Rows.Add(2, 30, 2, "2011-07-05 09:47:50.850", 68);
dt.Rows.Add(2, 1095, "2, 2011-07-01 17:05:25.810", 0);
统计如下
MTID USedDay TypeId maxDate TMoney count
1 1 1 2011-07-04 10:35:29.330 108 9
1 1 2 2011-07-04 10:35:29.330 72 4
1 30 1 2011-07-04 10:35:29.330 136 3
1 30 2 2011-07-04 10:35:29.330 680 3
1 365 1 2011-07-04 10:35:29.330 568 5
1 365 2 2011-07-04 10:35:29.330 2840 6

2 1 1 2011-07-04 10:35:29.330 36 3
2 1 2 2011-07-04 10:35:29.330 60 5
2 30 1 2011-07-04 10:35:29.330 136 1
2 30 2 2011-07-04 10:35:29.330 380 1
2 365 1 2011-07-04 10:35:29.330 0 3
2 365 2 2011-07-04 10:35:29.330 0 0
在之前的统计下在按照TypeId分组 count字段 是UsedDay / 日(1)月(30)年(365)
手工输入的希望没错


110,587

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧