如何使用Linq在DateTime之间对数据进行分组
本文关键字:数据 之间 何使用 Linq DateTime | 更新日期: 2023-09-27 18:28:55
我的学生班是
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public DateTime Admission{get; set;}
}
我想对日期时间之间的数据进行分组,其中入院必须在今天早上7点到第二天早上7点之间,例如:-2014年4月11日7:0:0和2014年5月11日7:00这些日期时间之间所有数据都必须在一个组中
目前我正在这样做
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();
但它不起作用。
您可以使用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());
这对您不起作用,因为您使用Admission中的日期来创建要比较的新日期时间,您必须使用today日期时间(或您想要的其他特定日期)来创建新日期时间。试试这个:
var groupByAdmsn = listOfStudent.
GroupBy(x => x.Admission < new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 7, 0, 0).AddDays(1) &&
x.Admission >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 7, 0, 0))
.Select(x => x)
.ToList();