개발꿈나무
[Linq] - Group by 본문
반응형
Group by
내가 필요했던 쿼리는 최근 며칠동안의 생성날짜(created_date)별 DCN의 갯수이다.
created_date는 날짜뿐만 아니라 시간까지 저장되어 있다.
그래서 created_date.ToString("yyyyMMdd")를 통해 날짜만 뽑아냈고,
Convert.ToInt32()를 통해 숫자로 변환하여 최근 며칠 이내인지 체크했다.
그런 다음 group by를 통해 날짜별로 그룹화를 수행하여 dcn_group에 저장했고,
dcn_group을 이용하여 DateDcn 객체를 만들었다.
SQL에서도 그렇듯 Groupby를 수행하면 groupby절에 있는 컬럼만 select 가능하다.
groupby절의 컬럼은 Key로 저장되어 있다.
하지만 나는 groupby절에 존재하지 않는 컬럼도 select할 필요가 있었다.
이런 경우 groupby를 수행한 결과를 저장한 객체(dcn_group)에서 가져다 사용할 수 있다.
내 코드에서는 <W_DCN>Dcn에 dcn_group을 저장했다.
private List<DateDcn> QueryFucn(DateTime days_ago, IEnumerable<W_DCN> dcns)
{
var query = (from dcn in dcns
where Convert.ToInt32(dcn.CREATED_DATE.ToString("yyyyMMdd")) >= Convert.ToInt32(days_ago.ToString("yyyyMMdd"))
group dcn by dcn.CREATED_DATE.ToString("yyyyMMdd") into dcn_group
select new DateDcn
{
KeyData = dcn_group.Key,
Cnt = dcn_group.Count(),
Dcn = dcn_group
}).ToList();
return query;
}
public class DateDcn
{
public string KeyData { get; set; }
public int Cnt { get; set; }
public IEnumerable<W_DCN> Dcn { get; set; }
}
반응형
'C# > LINQ' 카테고리의 다른 글
[Linq] GROUP BY - Week of YEAR (주별 group by) 2 - Monday To Sunday (0) | 2021.12.07 |
---|---|
[Linq] GROUP BY - Week of YEAR (주별 group by) (0) | 2021.12.01 |
[Linq] - Group by + Join (+ Case when~ then) (0) | 2021.11.10 |
[Linq] - Join (0) | 2021.11.09 |
Comments