2014-12-23 3 views
0

나는 동적 Linq를 사용하고 있습니다.동적 Linq 그룹에 의해 UnixTime

var groupedData = resultSet.AsQueryable().GroupBy("Username", "it").Select("new (it.Key as key, it.Count() as count)"); 

하지만 그룹화 키로 unixtime 열을 사용하려면 : 그룹으로는 다음과 같이 작동합니다. 예 테이블 :

CreatedDate (정수) 나는 결과로 원하는 것은

1419258192 (22/12/2014 14:23:12) 
1419292800 (23/12/2014 00:00:00) 
1419349440 (23/12/2014 15:44:00) 
1419379200 (24/12/2014 00:00:00) 

: 나는 가능한 한 빨리 동적 부분에서 얻으려고 할

22/12/2014: 1 
23/12/2014: 2 
24/12/2014: 1 
+0

날짜/시간뿐만 아니라 * 날짜 *를 원하는 것처럼 들립니다. 여기에 역동적 인 것을 사용해야합니까? 모든 것이 저에게 정적으로 보입니다 ... –

+0

어떤 종류의'CreateDate'입니까? 끈? –

+0

@JonSkeet "CreatedDate"라고 썼지 만 그것은 단지 예일뿐입니다. 동적이며 모든 열이 될 수 있습니다. –

답변

1

. 그런 다음 DateTime으로 변환하고 Date 부분을 그룹화에 사용할 수 있습니다. 당신은 필드 이름의 동적해야하는 경우, 당신은 그렇게하지만, 추가 작업에 대한 IEnumerable<long>으로 끝낼 수 있습니다 : 당신이 다른 시간대로 변환해야하는 경우

var groupedData = resultSet.AsQueryable() 
          .Select("CreatedDate") 
          .AsEnumerable<long>() 
          .GroupBy(UnixTimestampToDate) 
          .Select(g => new { g.Key, Count = g.Count() }); 

... 
private static readonly DateTime UnixEpoch = 
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

private static DateTime UnixTimestampToDate(long timestamp) 
{ 
    return UnixEpoch.AddSeconds(timestamp) 
        .Date; 
} 

, 당신은 UnixTimestampToDate에서 그렇게 할 수 ... 유닉스 타임 스탬프에서 UTC DateTime으로 변환하여 Date이 아닌을 호출 한 다음 다른 시간대로 변환 한 다음 나중에 날짜를 가져 와서 쿼리 자체의 일부로 만들 수 있습니다.

+0

완벽하게 일했습니다! 고맙습니다. –