您可以編寫自己的IEqualityComparer<DateTime>
,以僅比較您關心的DateTime部分。 LINQ的GroupBy有一個過載,需要IEqualityComparer
。我最近遇到了同樣的問題,並做到了這一點。
但是,在轉換爲字符串之前,您必須先致電GroupBy
。如果您不能,那麼您可能需要創建一個IEqualityComparer<string>
,並在比較之前將字符串解析回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);
}
}
我沒有測試過,我沒加null檢查或格式檢查。該代碼旨在說明總體思路。
我想我太接受了字面意思。你只需要幫助格式化? – 2010-03-09 10:58:14
我需要羣...但這也是關於格式化的一種比較方法 – Cynede 2010-03-09 11:06:14