[SQL] LINQ에 의해 중첩 된 그룹
SQLLINQ에 의해 중첩 된 그룹
내가 LINQ 쿼리와 함께이 문제를 해결할 수없는입니다.
우리는 테이블 구조를 가지고 그래서 다음과 같이 : 아이디 || || bug_category bug_name || bug_details || bug_priority
나는 bug_category 처음으로 그룹으로합니다. 각 bug_category, 나는 bug__priority에 의해 차례로 그룹을합니다.
그래서 기본적으로 내가 좋아하는 뭔가를 원하는 :
버그의 bug_category = AUDIO : 없음 -> 크리티컬 = 3, 중간 = 2, 낮음 = 7 버그. bug_category = VIDEO :: 버그 없음 -> 크리티컬 = 5, 보통 = 1, 낮음 = 9 버그.
쿼리 아래의 카테고리와 customer_priority의 모든 고유 조합을 반환합니다 :
(RawDataList가 갖는 데이터를 단순히리스트이고 상기 한 구성)
var ProceesedData = from d in RawDataList
group d by new { d.bug_category, d.bug_priority } into g
select new
{
g.Key.bug_category,
g.Key.bug_priority
};
쿼리 아래의 해당 범주의 레코드 목록 다음 범주를 반환합니다 :
var ProceesedData = from d in RawDataList
group d by d.bug_category into g
select new { g.Key, records = g
};
하지만 ProcessedData (리턴 변수) 알 수없는 타입이기 때문에 더 이상 진행 할 수 없습니다입니다. 이것에 대한 어떤 생각?
해결법
-
==============================
1.나는 당신이 (이름이 더 관용적로 변경) 할 생각 :
나는 당신이 (이름이 더 관용적로 변경) 할 생각 :
var query = from bug in RawListData group bug by new { bug.Category, bug.Priority } into grouped select new { Category = grouped.Key.Category, Priority = grouped.Key.Priority, Count = grouped.Count() };
그때:
foreach (var result in query) { Console.WriteLine("{0} - {1} - {2}", result.Category, result.Priority, result.Count); }
또한 (하지만 나중에 참조)
var query = from bug in RawListData group bug by new bug.Category into grouped select new { Category = grouped.Category, Counts = from bug in grouped group bug by grouped.Priority into g2 select new { Priority = g2.Key, Count = g2.Count() } }; foreach (var result in query) { Console.WriteLine("{0}: ", result.Category); foreach (var subresult in result.Counts) { Console.WriteLine(" {0}: {1}", subresult.Priority, subresult.Count); } }
편집 : 코멘트에 언급 한 바와 같이,이 여러 SQL 쿼리가 발생합니다. 비슷한 결과 구조를 얻으려면하지만 더 효율적으로 사용할 수 있습니다 :
var dbQuery = from bug in RawListData group bug by new { bug.Category, bug.Priority } into grouped select new { Category = grouped.Key.Category, Priority = grouped.Key.Priority, Count = grouped.Count() }; var query = dbQuery.ToLookup(result => result.Category, result => new { result.Priority, result.Count }; foreach (var result in query) { Console.WriteLine("{0}: ", result.Key); foreach (var subresult in result) { Console.WriteLine(" {0}: {1}", subresult.Priority, subresult.Count); } }
-
==============================
2.이 중첩 된 그룹을 달성하는 쉬운 방법입니다. 나는 특정 DB 공급자가 잘 처리 할 달라질 수 있습니다, 또는 잘 수행 알 수 있는지 여부, 메모리 컬렉션에 그것을 테스트했습니다.
이 중첩 된 그룹을 달성하는 쉬운 방법입니다. 나는 특정 DB 공급자가 잘 처리 할 달라질 수 있습니다, 또는 잘 수행 알 수 있는지 여부, 메모리 컬렉션에 그것을 테스트했습니다.
당신을 가정하면 두 가지 속성이 있고, 국가와 국가에 의해 그룹 원 :
var grouped = People .GroupBy(l => new { l.State, l.Country})//group by two things .GroupBy(l=> l.Key.Country)//this will become the outer grouping foreach(var country in grouped) { foreach(var state in country) { foreach(var personInState in state) { string description = $"Name: {personInState.Name}, State: {state.StateCode}, Country: {country.CountryCode}"; ... } } }
-
==============================
3.난 당신이 그런 일을 검색하는 생각 :
난 당신이 그런 일을 검색하는 생각 :
var processedData = rawData.GroupBy(bugs => bugs.bug_category, (category, elements) => new { Category = category, Bugs = elements.GroupBy(bugs => bugs.bug_priority, (priority, realbugs) => new { Priority = priority, Count = realbugs.Count() }) }); foreach (var data in processedData) { Console.WriteLine(data.Category); foreach (var element in data.Bugs) Console.WriteLine(" " + element.Priority + " = " + element.Count); }
-
==============================
4.당신은 이런 식으로 작업을 수행 할 수 있습니다
당신은 이런 식으로 작업을 수행 할 수 있습니다
var retList = (from dbc in db.Companies where dbc.IsVerified && dbc.SellsPCBs && !dbc.IsDeleted && !dbc.IsSpam && dbc.IsApproved select new { name = dbc.CompanyName, compID = dbc.CompanyID, state = dbc.State, city = dbc.City, businessType = dbc.BusinessType }).GroupBy(k => k.state).ToList(); List<dynamic> finalList = new List<dynamic>(); foreach (var item in retList) { finalList.Add(item.GroupBy(i => i.city)); }
from https://stackoverflow.com/questions/9578887/nested-group-by-linq by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL의에서 특정 데이터베이스에 대한 권한을 부여 (0) | 2020.06.02 |
---|---|
[SQL] 모든 중복 행을보기 (0) | 2020.06.02 |
[SQL] 나는 Redshift에에 보조금을 보는 방법 (0) | 2020.06.02 |
[SQL] SQL Server의 다른 테이블에 큰 테이블에 데이터를 복사하는 방법 (0) | 2020.06.02 |
[SQL] 여러 테이블에서 SQL INSERT INTO (0) | 2020.06.02 |