0

我有一个包含 5 列的 DataTable。

活动(字符串)时钟输入(日期时间)时钟输出(日期时间)总计(双精度)类型(整数)

我需要 GroupBy 时钟输出 DateTime.Date 并在该 OrderBy 类型内。

所以本质上,如果我有数据,我希望它像这样分组/排序:

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();
4

2 回答 2

2

我想你想这样做...

groupedSortedTbl = dt.AsEnumerable()
                    .OrderBy(d => d.Field<DateTime>("CLOCK_OUT").Date)
                    .ThenBy(t => t.Field<int>("Type"))
                    .CopyToDataTable();
于 2013-09-30T21:33:40.733 回答
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());
于 2013-09-30T21:37:43.577 回答