LINQ根据时间戳对对象进行分组
我有一系列对象定义为:
public class Foo
{
public DateTime Time {get;set;}
}
现在我想根据时间对对象(IEnumerable
)进行分组,例如我想根据小时或天或月对它们进行分组< /强>。
例如(按小时分组):
group 1(13:00-14:00) : foo1, foo2, foo3
group 2(14:00-15:00): foo4, foo5
如何在此基础上编写 LINQ?希望我说清楚了。
I have a serial of object defined as:
public class Foo
{
public DateTime Time {get;set;}
}
now I want to group objects(IEnumerable<Foo>
) according to the time, e.g. I want to group them according to hour or day or month.
for example (group into hour):
group 1(13:00-14:00) : foo1, foo2, foo3
group 2(14:00-15:00): foo4, foo5
How to write LINQ over this? hope I made myself clear.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Hour 是 DateTime 的一个属性,因此它应该像这样简单:
这将为您提供一个
IGrouping
对象,其中 int 键是小时。Hour is a property of DateTime, so it should be as simple as:
That would give you an
IGrouping<int, Foo>
object, in which the int key is the hour.这是使用查询表达式的示例。
...
编辑:关于需要分隔日、月等,您可以像下面这样扩展分组
Here's an example using query expression.
...
Edit: Regarding the need to seperate days, months, etc., you can extend your grouping like the following
如果您不想将昨天的 13-14 小时与今天的 13-14 小时分组,也不想将本月 5 日与上个月 5 日等分组,那么您需要执行类似的操作:-
如果您确实想将所有相同的小时/天/月映射到同一组中,那么会更容易。
If you don't want to group the 13-14hr yesterday with the 13-14hr today, nor the 5th of this month with the 5th of last month etc. so you'll need to do something like:-
If you really do want to map all of the same hour/day/month into the same group then it's easier.