SQL CASE 문을 LINQ로 변환: 실용 가이드
이 문서에서는 SQL CASE 문을 LINQ 문으로 변환하는 문제를 다룹니다. 사용자가 다음 SQL 조각 번역에 도움을 요청했습니다:
<code class="language-sql">osc_products.products_quantity = CASE WHEN itempromoflag 'N' THEN 100000 WHEN itemcat1 IN ('1','2','31') AND itemsalestatus = 'S' THEN 100000 WHEN itemsalestatus = 'O' THEN 0 ELSE cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted END </code>
제공된 초기 LINQ 시도가 충분하지 않았습니다.
<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag.Equals("Y") && items.ItemQtyOnHand - items.ItemQtyCommitted > 0 select items;</code>
이 쿼리는 데이터만 필터링합니다. SQL CASE 문의 논리를 구현하지 않습니다.
LINQ의 CASE 문에 해당하는 내용을 더 명확하게 설명하기 위해 더 간단한 예를 살펴보겠습니다.
<code class="language-csharp">Int32[] numbers = new Int32[] { 1, 2, 1, 3, 1, 5, 3, 1 }; var numberText = ( from n in numbers where n > 0 select new { Number = n, Text = ( n == 1 ? "One" : n == 2 ? "Two" : n == 3 ? "Three" : "Unknown" ) } );</code>
이는 CASE 문의 동작을 모방하기 위해 삼항 조건 연산자(?:
)를 사용하는 방법을 보여줍니다. 조건은 순차적으로 평가되어 각 일치 항목에 대해 적절한 값을 반환합니다. 결과는 각각 숫자와 텍스트 표현을 포함하는 일련의 익명 개체입니다. 이 원칙을 원래 SQL CASE 문에 적용하려면 LINQ 쿼리 내에서 유사한 중첩 조건부 접근 방식이 필요합니다. 이를 db.cdsItems
내의 특정 데이터 구조 및 관계에 적용하고 잠재적으로 itempromoflag
, itemcat1
및 itemsalestatus
에 액세스하기 위해 다른 테이블과 조인합니다. ELSE
.
위 내용은 SQL CASE 문을 LINQ 쿼리로 효과적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!