【发布时间】:2013-01-26 18:51:18
【问题描述】:
早上好,我需要将两个列表合并在一起并从中创建一个数据表,我有以下代码块:
private static DataTable GetDataTable(IList<DataValue> listOneDataValues,
IList<DataValue> listTwoDataValues)
{
var dataTable = new DataTable();
dataTable.Columns.Add("ColumnFromListOne");
dataTable.Columns.Add("ColumnFromListTwo");
dataTable.Columns.Add("TimeStamp");
//Group the lists together
var query = (from listOne in listOneDataValues
from listTwo in listTwoDataValues
let columnFromListOne= listOne.DoubleValue
let columnFromListTwo= listTwo.DoubleValue
let timestamp = listOne.TimeStamp
where listOne.TimeStamp == listTwo.TimeStamp
select new {ColumnFromListTwo = columnFromListOne, ColumnFromListOne = columnFromListTwo, Timestamp = timestamp});
foreach(var q in query)
dataTable.Rows.Add(q.ColumnFromListOne, q.ColumnFromListTwo, q.TimeStamp);
return dataTable;
}
问题是这两个列表包含的时间戳相差几秒钟,而且它们根本不对齐,所以我的最终结果是数据表中的一条或零条记录,即使每个列表都包含 200 + 记录。我对 LINQ 很不满意,希望能在正确的方向上有所帮助。我想我需要在分组之前插入时间戳,但我想知道执行此类操作的最佳实践模式。
【问题讨论】:
-
您想如何处理相差几秒钟的时间戳?它们是不同的,所以它们应该被视为不同的。您可以四舍五入或截断到最近的分钟,但如果时间戳跨越那条线怎么办?你可以找到它们之间的距离,但如果你有很多事件,你会得到重叠。
-
最低粒度级别是每 5 分钟一次。我需要四舍五入到我猜的最接近的 5 分钟。