c#如何对数据进行分组之间使用 Linq 的日期时间

标签: Linq C#
发布时间: 2017/2/28 23:08:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的学生课

class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
    public DateTime Admission{get; set;}
}

我想要组之间哪里入场必须之间今天 7 上午到第二天早上 7 上午,例如 datetime 数据:-2014/11/4 7:0:0 和 2014/11/5 7:0:0 这些日期时间之间的所有数据都必须在单个组

目前正在像这样

var groupByAdmsn = listOfStudent.
GroupBy(x => x.Admission < new DateTime(x.Admission.Year, x.Admission.Month, x.Admission.Day, 7, 0, 0).AddDays(1) &&
 x.Admission >= new DateTime(x.Admission.Year, x.Admission.Month, x.Admission.Day, 7, 0, 0))
.Select(x => x)
.ToList();

但它不工作。

解决方法 1:

您可以使用 IEqualityComparer:

public class DateComparer : IEqualityComparer<DateTime>
    {
            public bool Equals(DateTime x, DateTime y)
            {
                    return GetHashCode(x) == GetHashCode(y);
            }

            public int GetHashCode(DateTime dt)
            {
                    // Normalise unique hashcode to single group time [before 7am uses the previous day]
                    DateTime hashDt = new DateTime(dt.Year, dt.Month, dt.Day);
                    if (dt.Hour < 7)
                    {
                            hashDt = hashDt.AddDays(-1);
                    }
                    return hashDt.GetHashCode();
            }
    }

调用的示例︰

    var groupByAdmsn = listOfStudent.GroupBy(x => x.Admission , new DateComparer());
官方微信
官方QQ群
31647020