2016-11-05 49 views
0

我希望有人可以幫助我解決這個令人困惑的問題!從單個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嗎?

預先感謝您的協助。

回答

1

如果我理解正確,你想要做的除了在不同的列上完全相同的東西。 所以應該改變的僅僅是表達進入的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'取勝了。我非常感謝你的協助。再次感謝。 –