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

问题描述:

我希望有人可以帮助我解决这个令人困惑的问题!从单个DataTable创建DataTable的列表,但按天分组

在过去,我使用以下语句以获得List<DataTable>,其中列表中的每个DataTable包含“inputDT”数据表“名称”列中每个不同名称的所有记录。

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

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

我现在想要做类似的事情,但我想GROUP BY一个DateTime柱,其中的具有相同日期(不管时间)记录在List<DataTable>每个DataTable S的包括。

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

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

[注 - 所有日期都在表中。所以我不期待一个不在dataTable中的日期的空列表。道歉,如果这是显而易见的]

我在哪里! 多少头刮后,我想出了一些类似的,但我不知道如何完成它:

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

我很困惑。任何人都可以帮忙吗?这实际上可以使用LINQ吗?

预先感谢您的协助。

如果我理解正确,你想要做的除了在不同的列上完全相同的东西。 所以应该改变的仅仅是表达进入的GroupBy()方法:

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

编辑:EntityFunctions.TruncateTime方法只使用LINQ工程实体(msdn),所以GroupBy()不能使用它。相反,您可以获得DateTimeDate属性。

+0

你好 - 谢谢你的期待。这不完全相同,我想在日期时间列上按日期分组(不是日期/时间)。所以我希望特定日子的所有行都在dataTable中,以此类推。你所建议的只会导致具有完全相同日期和时间的行在同一个表中。这不是我正在寻找的。 –

+0

我以为EntityFunctions.TruncateTime正在为你工作。 将更新安装程序。这是一个精华的例子:https://gist.github.com/erikbozic/090ca321946eae6d05fd50deeaa15384 –

+0

非常好 - 谢谢你,thinkplex。你看起来很容易。我用'EntityFunctions.TruncateTime'取胜了。我非常感谢你的协助。再次感谢。 –