2009-03-15 13 views
4

이것은 다른 질문의 답변 섹션에서 question에 대한 응답입니다.LINQ의 하위 테이블에서 where 조건을 만드는 방법

나는 각각 OrderItems의 콜렉션을 주문하고 각 OrderItem에는 PartId가 있습니다.)

1) 특정 부분의 ID

SELECT * 
FROM Order 
WHERE Id in (SELECT OrderId FROM OrderItems WHERE PartId = 100) 

이있는 모든 주문을 선택 Order.OrderNumber 및 OrderItem.PartName

SELECT Order.OrderNumber, OrderItem.PartName 
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId 
WHERE OrderItem.partId = 100 
를 선택 : LINQ를 사용하여 나는 다음과 같은 SQL 문을 구현 어떻게

3) Order.OrderNumber 전체 OrderItem에 세부 : SELECT

SELECT Order.OrderNumber, OrderItem.* 
FROM Order INNER JOIN OrderItem ON Order.Id = OrderItem.OrderId 
WHERE OrderItem.partId = 100 

답변

11

Actua을 L 코드가 있어야한다

1)

var orders = from o in Orders 
      where o.OrderItems.Any(i => i.PartId == 100) 
      select o; 

Any의() 메소드는 부울을 반환하고 절 "의"SQL 같다. 이 조인 내부처럼 절에서 100

2A의 PartId을 가지고있는 모든 OrderItems에이 모든 순서)

// This will create a new type with the 2 details required 
var orderItemDetail = from o in Orders 
         from i in Orders.OrderItems 
         where i.PartId == 100 
         select new() 
         { 
          o.OrderNumber, 
          i.PartName 
         } 

두 가지를 얻을 것입니다.

2B)

// This will populate the OrderItemSummary type 
var orderItemDetail = from o in Orders 
         from i in Orders.OrderItems 
         where i.PartId == 100 
         select new OrderItemSummary() 
         { 
          OriginalOrderNumber = o.OrderNumber, 
          PartName = i.PartName 
         } 

3) 이후

// This will create a new type with two properties, one being the 
// whole OrderItem object. 
var orderItemDetail = from o in Orders 
         from i in Orders.OrderItems 
         where i.PartId == 100 
         select new() 
         { 
          OrderNumber = o.OrderNumber, 
          Item = i 
         } 

에 "i"를 입력 OrderItem에의 목적은, 항목은 OrderItem에로 생성된다.

+1

답변을 사랑해. 나는 Orders.OrderItems i.PartId == 100에서 Orders from i의 구문에서 표준 LINQ API 호출 (pseudo SQL 구문 대신)에 어떤 구문이 있는지 궁금합니다. – kdawg

관련 문제