프로젝션
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장

프로젝션

 

이 항목의 예에서는 개별 이벤트를 출력 이벤트로 변환하는 작업의 일환으로 개별 이벤트에 대해 특정 계산을 수행하는 방법을 보여 줍니다. 이러한 계산은 프로젝션을 사용하여 수행합니다. 프로젝션은 IQStreamable<T1> 임시 스트림에 대해 작동하며 IQStreamable<T2> 스트림을 새로 생성합니다. 여기서 IQStreamable<T>는 T 유형 페이로드를 포함하는 이벤트 스트림입니다. LINQ에서 SELECT 절을 사용할 때는 항상 프로젝션이 수행됩니다. 프로젝션은 아래에서 설명하는 것처럼 새 유형을 암시적으로 만들거나 정의된 이벤트 유형을 명시적으로 참조할 수 있습니다.

System_CAPS_ICON_note.jpg 참고


프로젝션은 입력 및 출력 어댑터에서 생성 및 소비되는 CEPStream<T> 스트림에서도 작동할 수 있습니다. 입력 및 출력 어댑터 개발에 대한 자세한 내용은 입력 및 출력 어댑터(레거시 모델)를 참조하십시오. 이 항목의 설명은 두 스트림 유형 모두에 해당됩니다.

다음 예에서는 쿼리에 정의된 프로젝트 식에 따라 TestEventStream 스트림의 모든 이벤트를 새 이벤트로 프로젝션합니다. 쿼리에서 if 필드에 2를 곱합니다. 이들 값이 새 이벤트로 프로젝션됩니다. 여기서 새 이벤트 유형은 익명 유형이며 프로젝트 식으로 작성된 필드 할당을 통해 암시적으로 정의됩니다.

// Assuming the following input event type:  
public class MyPayload  
{  
    public int i;  
    public float f;  
}  
  
var queryProject = from c in TestEventStream  
                   select new {i = c.i * 2, f = c.f * 2};  

다음 예에서는 명시적으로 선언된 MeterWattage 이벤트 유형을 사용하여 MeterReading 유형의 입력 스트림에 있는 모든 이벤트를 realValueStream 스트림의 새 이벤트로 프로젝션합니다. InputStream 스트림에 있는 각 이벤트의 consumption 필드는 double CLR 유형으로 변환되며, 이 값을 10으로 나눈 다음 MeterWattage 유형의 wattage 필드에 할당합니다.

public class MeterReading  
{  
    public int consumption;  
}  
  
public class MeterWattage  
{  
    public double wattage;  
}  
  
[…]  
  
var realValueStream = from e in InputStream  
                      select new MeterWattage {wattage = (double)e.consumption / 10};  

프로젝트 식은 유형의 생성자를 사용할 수 없으며, 항상 MemberInit 식(중괄호 내의 이벤트 필드 할당)을 통해 필드 할당을 새 유형(암시적/명시적)으로 지정해야 합니다. 그러나 다음 예와 같이 기본 유형의 단일 필드를 프로젝션할 때는 이 구문이 필요하지 않습니다.

public class MeterReading  
{  
    public int consumption;  
}  
  
public class MeterWattage  
{  
    public double wattage;  
}  
  
[…]  
  
var realValueStream = from e in InputStream  
                      select (double)e.consumption / 10;  

이 프로젝션은 기본 double 유형의 스트림을 암시적으로 생성합니다.

명시적 유형을 사용하는 경우 각 필드 또는 속성을 프로젝트 식에서 초기화해야 합니다.

StreamInsight 서버 개념

표시:
© 2016 Microsoft