2012-09-23 2 views
1

C# LINQ에서 람다 형식을 사용하여 초당 레코드를 그룹화하는 방법을 찾고 있습니다. 나의 수색에서 나는 이것을하는 좋은 방법을 아직 찾아 내지 않았다.SQL을 LINQ로 변환하여 초당 생성 된 레코드를 그룹화해야 함

SQL 쿼리는 다음과 같습니다.

select count(cct_id) as 'cnt' 
    ,Year(cct_date_created) 
    ,Month(cct_date_created) 
    ,datepart(dd,cct_date_created) 
    ,datepart(hh,cct_date_created) 
    ,datepart(mi,cct_date_created) 
    ,datepart(ss,cct_date_created) 
from ams_transactions with (nolock) 
where cct_date_created between dateadd(dd,-1,getdate()) and getdate() 
group by 
    Year(cct_date_created) 
    ,Month(cct_date_created) 
    ,datepart(dd,cct_date_created) 
    ,datepart(hh,cct_date_created) 
    ,datepart(mi,cct_date_created) 
    ,datepart(ss,cct_date_created) 

가장 가까운 i는 다음과 같았지만 올바른 결과를 제공하지 못했습니다.

var groupedResult = MyTable.Where(t => t.cct_date_created > start 
            && t.t.cct_date_created < end) 
          .GroupBy(t => new { t.cct_date_created.Month, 
               t.cct_date_created.Day, 
               t.cct_date_created.Hour, 
               t.cct_date_created.Minute, 
               t.cct_date_created.Second }) 
          .Select(group => new { 
               TPS = group.Key.Second 
               }); 

이 초 그룹화하지만 개별 날짜 범위에서 분 대신 날짜 범위에있는 모든 분의 초당로 고려하지 않고있는 것으로 보인다. 초당 트랜잭션을 얻으려면 월, 시간, 일, 분의 각 분을 별도로 고려해야합니다.

목표는이 그룹화 된 목록에서 최대 및 평균을 가져 오는 것입니다. 어떤 도움을 크게 주시면 감사하겠습니다 :)

답변

2

현재 카운트가 아닌 두 번째를 선택합니다 - 왜? (당신은 또한 명백한 이유를 위해 익명 형식을 사용하고 - 당신은 하나의 속성을 가지고 때마다, 그냥 익명 형식에 포장하는 대신 해당 속성을 선택하는 것이 좋습니다.)

그래서 변경하려면 Select에 :

.Select(group => new { Key = group.Key, 
         Transactions = group.Count() }); 

또는 개별적으로 키 속성을 모두 가지고 :

.Select(group => new { group.Month, 
         group.Day, 
         group.Hour, 
         group.Minute, 
         group.Second, 
         Transactions = group.Count() }); 

(여담으로, 당신은 확실히 연도 부분이 필요하지 않습니다 그것은 당신의 SQL에서의 ...?)

+0

이것을 테스트 해 보니 문제가 해결되었습니다. 조언 감사합니다! – FlyTigert

관련 문제