例如:
ID Name Age Salary ClicksAsofToday Timestamp
1. Arun 25 25000 5 Aug,20 10.50pm
2. Arun 25 2000 8 Aug,20 10.55pm
3. Arun 25 25000 13 Aug,20 11.00pm
4. Vijay 25 20000 2 Aug,20 10.50pm
5. Vijay 25 20000 3 Aug,20 10.55pm
6. Vijay 25 20000 8 Aug,20 11.00pm
7. Vijay 25 20000 3 Aug,21 10.55pm
8. Vijay 25 20000 8 Aug,21 12.00pm
我希望结果为
ID Name Age Salary ClicksAsofToday Timestamp
1. Arun 25 25000 13 Aug,20 11.00pm (Max time of that Particular date)
2. Vijay 25 20000 8 Aug,20 11.00pm
8. Vijay 25 20000 8 Aug,21 12.00pm (Max time of another date)
时间戳列的类型为DateTime
答案 0 :(得分:0)
使用以下数据:
public class Data
{
public String Name
{
get;
set;
}
public DateTime TimeStamp
{
get;
set;
}
public Data(String name, DateTime timeStamp)
{
this.Name = name;
this.TimeStamp = timeStamp;
}
public override string ToString()
{
return String.Format("{0} at {1}", this.Name, this.TimeStamp);
}
}
您可以使用:
var source = new Data[]
{
new Data("Yesterday early", DateTime.Today.AddDays(-1)),
new Data("Yesterday middle", DateTime.Today.AddDays(-1).AddHours(2)),
new Data("Yesterday middle", DateTime.Today.AddDays(-1).AddHours(2)),
new Data("Yesterday late", DateTime.Today.AddDays(-1).AddHours(3)),
new Data("Today early", DateTime.Today),
new Data("Today middle", DateTime.Today.AddHours(2)),
new Data("Today late 1", DateTime.Today.AddHours(3)),
new Data("Today late 2", DateTime.Today.AddHours(3)),
new Data("Tomorrow early", DateTime.Today.AddDays(1)),
new Data("Tomorrow middle", DateTime.Today.AddDays(1).AddHours(2)),
new Data("Tomorrow late 1", DateTime.Today.AddDays(1).AddHours(3)),
new Data("Tomorrow late 2", DateTime.Today.AddDays(1).AddHours(3)),
};
var lateInDays = source.
GroupBy((data) => data.TimeStamp.Date).
Select(dayGroup =>
new
{
DayGroup = dayGroup,
MaxTimeInDay = dayGroup.Max(data => data.TimeStamp)
}).
SelectMany((dayGroupWithMaxTime) =>
dayGroupWithMaxTime.
DayGroup.
Where(data =>
(data.TimeStamp == dayGroupWithMaxTime.MaxTimeInDay)));
这远非最佳,但它确实有效。
工作原理:
1。 GroupBy((data) => data.TimeStamp.Date).
- 按日期对数据项进行分组(三天有三组)
2。部分:
Select(dayGroup =>
new
{
DayGroup = dayGroup,
MaxTimeInDay = dayGroup.Max(data => data.TimeStamp)
}).
增加三个每日组中的每个组,其中包含有关其最大时间的信息(实际上是完整的DateTime,因此您可能希望使用DateTime.TimeOfDay属性而不是完整的DateTime)
3。部分
SelectMany((dayGroupWithMaxTime) =>
dayGroupWithMaxTime.
DayGroup.
Where(data =>
(data.TimeStamp == dayGroupWithMaxTime.MaxTimeInDay)));
从每个小组(每天)选择所有记录,每天最长时间,只需简单地将每个记录的TimeStamp与最大日期(当前组(日))进行比较:
dayGroupWithMaxTime.
DayGroup.
Where(data =>
(data.TimeStamp == dayGroupWithMaxTime.MaxTimeInDay))