Compartilhar via


Projeção

Os exemplos deste tópico mostram como executar computações específicas em eventos individuais como parte de sua transformação em eventos de saída. Essas computações são executadas usando uma projeção. Uma projeção opera em um fluxo CepStream<T1> e gera um novo fluxo CepStream<T2> em que CepStream<T> é o fluxo de Evento com carga de tipo T. As projeções sempre ocorrem quando a cláusula de seleção é usada em LINQ. Elas podem criar um novo tipo implicitamente ou fazer referência de maneira explícita a um tipo de evento definido, conforme mostrado a seguir.

Exemplos

No exemplo a seguir, todo evento no fluxo TestEventStream será projetado em um novo evento, de acordo com as expressões do projeto definidas na consulta. Na consulta, os campos i e f são multiplicados por 2. Esses valores são projetados nos novos eventos. O novo tipo de evento aqui é um tipo anônimo, definido implicitamente pelas atribuições de campo criadas pela expressão do projeto.

// 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};

No exemplo a seguir, cada evento no fluxo de entrada de tipo MeterReading será projetado em um novo evento no fluxo realValueStream, usando o tipo de evento explicitamente declarado MeterWattage. O campo consumption para cada evento do fluxo InputStream é convertido em um tipo CLR double, dividido por 10 e depois atribuído ao campo wattage do tipo MeterWattage.

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};

A expressão do projeto não pode usar um construtor de tipo. Ela deve sempre especificar a atribuição de campo ao novo tipo (implícito ou explícito) através de uma expressão MemberInit (a atribuição de campos de evento entre chaves). No entanto, essa sintaxe não é necessária à projeção de um único campo de um tipo primitivo, conforme mostrado no exemplo a seguir:

public class MeterReading
{
    public int consumption;
}

public class MeterWattage
{
    public double wattage;
}

[…]

var realValueStream = from e in InputStream
                      select (double)e.consumption / 10;

Observe que essa projeção produz implicitamente um CepStream do tipo primitivo double.

Quando um tipo explícito é usado, cada um de seus campos ou propriedades deve ser inicializado na expressão do projeto.

Consulte também

Conceitos

Conceitos do servidor StreamInsight