2014-11-04 2 views
0
를 사용하여

내 학생 클래스는 얼마나날짜 시간 사이의 그룹 데이터 Linq에

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

내가 그룹에 날짜 사이의 데이터를 원하는 위치에 입학해야합니다 예를 들어 다음 날 아침 오전 7시, 오늘 오전 7시 사이 : - 11/4/2,014 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(); 

처럼 그 일을하고있다 작동 안함.

답변

2

당신은 IEqualityComparer 사용할 수 있습니다

var groupByAdmsn = listOfStudent.GroupBy(x => x.Admission , new DateComparer()); 
+0

솔루션 위에서 주어진 제대로 작동하려면 Equals 메서드에 작은 수정이 필요; Equals Method는 매번 true를 반환해야합니다. 그렇지 않으면 hashcode가 전날의 데이터 임에도 새 그룹의 데이터를 그룹화합니다. 위 코드는 2011 년 11 월 5 일 6:58:00 및 2014 년 11 월 5 일 오전 6시 21 분에 작동하지 않습니다. @ ChrisC73 맞습니다 또는 다른 이유로 코드가 작동하지 않는 이유입니다. –

+0

당신은 절대적으로 옳습니다 : 해시 코드와 같은 논리를 사용하도록 답변을 업데이트했습니다. – ChrisC73

0

Admission에서 날짜를 사용하여 비교할 새 날짜 시간을 만들기 때문에 오늘 datetime (또는 원하는 특정 날짜)을 사용하여 새 datetime을 만들어야하기 때문에 효과가 없습니다. 이 시도 : 전화의

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 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(); 
관련 문제