从单个DataTable创建DataTable列表,但按天分组

时间:2016-11-05 17:34:57

标签: c# .net linq datatable

我希望有人可以帮我解决这个令人费解的问题!

在过去,我使用以下语句来获取List<DataTable>,其中列表中的每个DataTable都包含&中每个不同名称的所有记录。 34;名称&#34; &#34; inputDT&#34;的列数据表。

换句话说,此代码输出一个表列表,其中每个表包含特定名称的数据:

List<DataTable> listOfSerialNumberDataTables = inputDT.AsEnumerable().GroupBy(row => row.Field<string>("Name")).Select(g => g.CopyToDataTable()).ToList();

我现在想做类似的事情,除了我想按DateTime列进行分组,其中DataTable中的每个List<DataTable>都包含已有的记录相同的日期(无论时间如何)。

所以我尝试创建代码,创建一个列表,其中list<DataTable>中的表格将包含特定日期的所有数据。

例如,其中一个表格将包含2016年10月1日的所有数据,列表中的另一个表格将包含10月3日的数据等。[PS我并不担心列的输出的格式 - 这个问题只是获取DataTables的列表,其中的数据是针对特定的。]

[注意 - 所有日期都在表格中。因此,我不期望一个空列表中的日期不在dataTable中。抱歉,如果这很明显!]

我在哪里: 经过多次努力之后,我想出了类似的东西,但我不确定如何完成它:

List<DataTable> listOfDaysForSingleSerialNo = datatable.AsEnumerable().GroupBy(x => EntityFunctions.TruncateTime(x.Field<DateTime>("DateOfResult"))).<what goes here?>

我感到困惑。有人可以帮忙吗?这实际上是否可以使用LINQ?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解正确你想做同样的事情,除了在另一列上。 所以唯一应该改变的是进入GroupBy()方法的表达式:

List<DataTable> listOfDaysForSingleSerialNo = datatable.AsEnumerable().GroupBy(x => x.Field<DateTime>("DateOfResult").Date).Select(g => g.CopyToDataTable()).ToList();

修改 EntityFunctions.TruncateTime方法仅适用于LINQ to Entities(msdn),因此GroupBy()无法使用它。相反,您只需获取Date的{​​{1}}属性。