01.02.2010 0:00:00 - > 01.02.2010随时
01.02.2010 0:00:00 - > 01.02.2010 0:任何分钟和秒
所以这是我的约会对象:
DateTime x;
这是01.02.2010 0:00:00作为一个字符串
x.Date.ToString()
在这里我比较日期
DatarowsForOneDay = dt.Select("DailyRecTime= '" + x.ToString() + "'");
那么我怎么能按日期+小时分组而不关心分钟和秒.
您可以自己编写IEqualityComparer
,只比较您关心的DateTime部分.LINQ的GroupBy有一个需要的重载IEqualityComparer
.我最近遇到了同样的问题而且做到了这一点.
但是你必须GroupBy
在转换为字符串之前调用它.如果你不能那么你可能想要在比较之前创建一个IEqualityComparer
并将字符串解析回来DateTime
.
我现在没有原始代码.我从内存中重新键入了这个并没有测试它.
public class DateAndHourComparer : IEqualityComparer { public bool Equals(DateTime x, DateTime y) { var xAsDateAndHours = AsDateHoursAndMinutes(x); var yAsDateAndHours = AsDateHoursAndMinutes(y); return xAsDateAndHours.Equals(yAsDateAndHours); } private DateTime AsDateHoursAndMinutes(DateTime dateTime) { return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0); } public int GetHashCode(DateTime obj) { return AsDateHoursAndMinutes(obj).GetHashCode(); } }
我从来没有做过基于字符串的版本,但它可以使用上面DateTime
的代码,看起来像......
public class DateAndHourStringComparer : IEqualityComparer { private readonly DateAndHourComparer dateComparer = new DateAndHourComparer(); public bool Equals(string x, string y) { var xDate = DateTime.Parse(x); var yDate = DateTime.Parse(y); return dateComparer.Equals(xDate, yDate); } public int GetHashCode(string obj) { var date = DateTime.Parse(obj); return dateComparer.GetHashCode(date); } }
我没有测试过,我没有添加空检查或格式检查.该代码旨在展示一般概念.