집 >데이터 베이스 >MySQL 튜토리얼 >여러 조인, 카운트 및 왼쪽 결합으로 복잡한 SQL 쿼리를 LINQ로 변환하는 방법은 무엇입니까?
여러 조인, 개수 및 왼쪽 조인이 포함된 복잡한 SQL 쿼리를 LINQ로 변환
이 예에서는 여러 조인과 집계가 포함된 복잡한 SQL 쿼리를 동등한 LINQ 쿼리로 변환하는 방법을 보여줍니다. 이 쿼리는 세 개의 테이블(TABLE_C, TABLE_V 및 TABLE_R)에서 데이터를 검색하고 특정 열에 대해 고유한 카운트 작업을 수행합니다.
SQL을 LINQ 쿼리 이해로 변환:
into
및 DefaultIfEmpty()
을 사용하여 LEFT JOIN을 시뮬레이션합니다. Distinct()
을 사용하세요. 다음은 쿼리 표현식 구문으로 작성된 LINQ 코드입니다.
<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() }; 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>
다음은 Lambda 식 구문으로 작성된 동등한 LINQ 코드입니다.
<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(subr2, 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 }) //处理r可能为null的情况 .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 }).Distinct();</code>
Lambda 표현식 버전에서 cvr.r.cnt
처리에 주의하세요. ?.
null 조건 연산자가 추가되어 r
이 null일 수 있는 상황을 처리하여 NullReferenceException 예외를 방지합니다. 두 방법 모두 동일한 기능을 수행하며 어떤 방법을 선택하는지는 개인 취향에 따라 결정됩니다.
위 내용은 여러 조인, 카운트 및 왼쪽 결합으로 복잡한 SQL 쿼리를 LINQ로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!