我有一个包含5列的DataTable。
活动(字符串) 时钟输入(日期时间) 时钟输出(日期时间) 总计(双倍) 输入(int)
我需要GroupBy Clock Out DateTime.Date并在该OrderBy中输入Type。
基本上,如果我有数据,我希望它分组/顺序如下:
Activity Clock In Clock Out Total Type
Drawing 09/16/13 13:30 09/16/13 13:32 0.02 1
Drawing 09/16/13 13:40 09/16/13 13:42 0.02 1
Testing 09/16/13 13:50 09/16/13 13:52 0.02 1
Testing 09/16/13 13:30 09/16/13 13:34 0.04 2
Testing 09/16/13 13:40 09/16/13 13:54 0.14 2
Drawing 09/17/13 13:50 09/17/13 13:52 0.02 1
Testing 09/17/13 13:30 09/17/13 13:34 0.04 2
Testing 09/17/13 13:40 09/17/13 13:54 0.14 2
Testing 09/18/13 13:52 09/18/13 13:54 0.02 2
我已经拥有DataTable中的所有数据,我只需要帮助进行分组......
有什么想法?我试过了:
groupedSortedTbl = dt.AsEnumerable()
.GroupBy(d => d.Field<DateTime>("CLOCK_OUT").Date)
.SelectMany(g => g.OrderBy(t => t.Field<int>("Type")))
.CopyToDataTable();
答案 0 :(得分:2)
我想你想这样做......
groupedSortedTbl = dt.AsEnumerable()
.OrderBy(d => d.Field<DateTime>("CLOCK_OUT").Date)
.ThenBy(t => t.Field<int>("Type"))
.CopyToDataTable();
答案 1 :(得分:0)
您想按Clock Out
分组吗?如果是这样,为什么你会使用SelectMany
将它们弄平呢?您可以改用OrderBy
+ ThenBy
。
DataTable groupedSortedTbl = dt.AsEnumerable()
.OrderBy(row => row.Field<DateTime>("CLOCK_OUT").Date)
.ThenBy(row => row.Field<int>("Type"))
.CopyToDataTable();
如果您想保留群组,则最后无法使用CopyToDataTable
来创建DataTable
。因此,您可以创建IEnumerable<Anonymous/Custom Type>
。或者您可以选择多个DataTables
,每个日期组一个:
IEnumerable<DataTable> dateGroups = dt.AsEnumerable()
.GroupBy(row => row.Field<DateTime>("CLOCK_OUT").Date)
.Select(g => g.OrderBy(t => t.Field<int>("Type")).CopyToDataTable());