집 >데이터 베이스 >MySQL 튜토리얼 >여러 조인, 카운트 및 왼쪽 결합으로 복잡한 SQL 쿼리를 LINQ로 변환하는 방법은 무엇입니까?
기존 SQL 쿼리에 복합 조인, 개수 및 왼쪽 조인이 포함된 경우 이를 동등한 LINQ 식으로 변환해야 합니다. 프로세스를 세분화하고 직면한 특정 문제를 해결해 보겠습니다.
변환 규칙 이해
SQL을 LINQ로 변환하려면 관련된 특정 변환 규칙을 이해해야 합니다. 몇 가지 주요 원칙은 다음과 같습니다.
DefaultIfEmpty()
메서드를 사용하여 구현됩니다. Count()
, Distinct().Count()
)를 사용하여 구현할 수 있습니다. SQL 쿼리 변환
제공된 SQL 쿼리를 고려하여 먼저 개수 계산을 위한 하위 쿼리를 정의합니다.
<code class="language-csharp">var subrq = from r in Table_R group r by r.Id into rg select new { Id = rg.Key, cnt = rg.Count() };</code>
이제 주요 검색어는 다음과 같습니다.
<code class="language-csharp">var ansq = (from c in Table_C join v in Table_V on c.Id equals v.Id join r in subrq on c.Id equals r.Id into rj from r in rj.DefaultIfEmpty() where c.IdUser == "1234" group new { c, v, r } by new { c.Id, c.Title, r.cnt } into cvrg select new { cvrg.Key.Title, Nb_V2 = cvrg.Count(), Nb_V1 = cvrg.Select(cvr => cvr.v.IdUser).Distinct().Count(), Nb_R = (int?)cvrg.Key.cnt }).Distinct();</code>
이 LINQ 식은 필요한 조인, 그룹화 및 계산 작업을 수행합니다.
람다식 변환
람다 표현식을 변환하려면 GroupJoin()
및 SelectMany()
메서드를 사용하여 왼쪽 조인을 처리할 수 있습니다.
<code class="language-csharp">var subr2 = Table_R.GroupBy(r => r.Id).Select(rg => new { Id = rg.Key, cnt = rg.Count() }); var ans2 = Table_C.Where(c => c.IdUser == "1234") .Join(Table_V, c => c.Id, v => v.Id, (c, v) => new { c, v }) .GroupJoin(subr, cv => cv.c.Id, r => r.Id, (cv, rj) => new { cv.c, cv.v, rj }) .SelectMany(cvrj => cvrj.rj.DefaultIfEmpty(), (cvrj, r) => new { cvrj.c, cvrj.v, r }) .GroupBy(cvr => new { cvr.c.Id, cvr.c.Title, cvr.r.cnt }) .Select(cvrg => new { cvrg.Key.Title, Nb_V2 = cvrg.Count(), Nb_V1 = cvrg.Select(cvr => cvr.v.IdUser).Distinct().Count(), Nb_R = (int?)cvrg.Key.cnt });</code>
이 람다 스타일 표현식은 쿼리 이해와 동일한 작업을 수행합니다.
위 내용은 여러 조인, 카운트 및 왼쪽 결합으로 복잡한 SQL 쿼리를 LINQ로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!